我正在开发一款应用程序,希望能够在Android和Blackberry上使用(未来可能还会加入JavaME)。所有平台的业务逻辑都将是通用的,因此代码中对应的层也将是通用的。
但我还有一个数据层——显然这将因不同平台而异。我的解决方案是使用一个bean和一个抽象的DataStore类。如果我使用Android的NotePad示例,它将如下所示: Note Bean:
每个平台都会实现数据存储接口并根据需要执行持久化数据访问。例如,Android实现将使用SQLite类来实现此目的。
这样,高级别的“层”将在所有平台之间共用 - 只要它们不使用任何特定于平台的功能。
问题:DataStore的功能是否与Android中的ContentProvider部分重叠?我考虑了各种方法来使其更加“清晰”,但我对其中任何一种都不太满意:
1. 让我的ContentProvider也实现DataStore接口。但是,这不会让ContentProvider变得混乱,更不用说“混淆”责任了吗?
2. 在ContentProvider中实现SQLite访问,然后使DataStore实现“调用”ContentProvider。但是,这会增加额外的开销。此外,我仍然需要直接使用ContentProvider,例如使用Android Search Framework。这不是在多个层中复制相同的功能吗?
3. 与上述方法相反 - 即在DataStore层中实现SQLite;然后让ContentProvider在幕后调用它。我想不出这与前一种方法有何区别。
总之,如果没有ContentProvider - 只有DataStore层将正常工作,并且此设计将使业务逻辑在各个平台上可重用。唯一的原因是我无法完全放弃ContentProviders是Android系统的某些组件希望您将数据公开为ContentProvider(例如搜索)。
我会感激任何有关如何在您的应用程序中处理此问题的提示。谢谢提前。
但我还有一个数据层——显然这将因不同平台而异。我的解决方案是使用一个bean和一个抽象的DataStore类。如果我使用Android的NotePad示例,它将如下所示: Note Bean:
public class Note {
private long id;
private String title;
private String note;
private long created;
private long modified;
//Appropriate constructors
//Getters and Setters
}
DataStore接口:
public interface NoteDataStore {
public boolean deleteNote(long noteId);
public boolean addNote(Note note);
public List<Note> listNotes();
public boolean editNote(long noteId, Note note);
public List<Note> search(String searchString);
}
每个平台都会实现数据存储接口并根据需要执行持久化数据访问。例如,Android实现将使用SQLite类来实现此目的。
这样,高级别的“层”将在所有平台之间共用 - 只要它们不使用任何特定于平台的功能。
问题:DataStore的功能是否与Android中的ContentProvider部分重叠?我考虑了各种方法来使其更加“清晰”,但我对其中任何一种都不太满意:
1. 让我的ContentProvider也实现DataStore接口。但是,这不会让ContentProvider变得混乱,更不用说“混淆”责任了吗?
2. 在ContentProvider中实现SQLite访问,然后使DataStore实现“调用”ContentProvider。但是,这会增加额外的开销。此外,我仍然需要直接使用ContentProvider,例如使用Android Search Framework。这不是在多个层中复制相同的功能吗?
3. 与上述方法相反 - 即在DataStore层中实现SQLite;然后让ContentProvider在幕后调用它。我想不出这与前一种方法有何区别。
总之,如果没有ContentProvider - 只有DataStore层将正常工作,并且此设计将使业务逻辑在各个平台上可重用。唯一的原因是我无法完全放弃ContentProviders是Android系统的某些组件希望您将数据公开为ContentProvider(例如搜索)。
我会感激任何有关如何在您的应用程序中处理此问题的提示。谢谢提前。