Я занимаюсь разработкой приложения, которое я хочу сделать доступным как для Android, так и для Blackberry (возможно, для JavaME в будущем).Бизнес-логика будет общей для всех платформ, а следовательно, и соответствующий уровень кода.
Но у меня также есть уровень данных, который, очевидно, будет отличаться для разных платформ.Мой подход к этому - иметь бин и абстрактный класс DataStore.Если бы я использовал образец NotePad для Android, он выглядел бы так:
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
}
Интерфейс хранилища данных:
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 для этой цели.
Таким образом, «слои» более высокого уровня будут общими для всех платформ, если они не используют какие-либо специфичные для платформы функции..
Вопрос:
Разве функциональность хранилища данных выше (частично) не пересекается с функциональностью ContentProvider
в Android?Я думал о различных подходах, чтобы сделать это «чище», но я не убежден ни в одном из них:
Пусть мой ContentProvider
также реализует интерфейс DataStore.Но разве это не загромождает ContentProvider, не говоря уже о том, чтобы «перепутать» обязанности?
Реализовать доступ SQLite в ContentProvider
- и затем выполнить реализацию DataStore «вызовом»ContentProvider под одеялом.Но как насчет накладных расходов дополнительного слоя?Кроме того, мне все равно нужно было бы использовать ContentProvider напрямую, например, для использования Android Search Framework.Разве это не похоже на дублирование одной и той же функциональности в нескольких слоях?
В противоположность вышеуказанному подходу - т. Е. Реализовать SQLite на уровне хранилища данных;и затем имейте ContentProvider
вызов к нему под одеялом.Я не могу думать о том, чем это отличается от предыдущего подхода.
В итоге - если бы не было ContentProvider
- просто слой DataStore будет работать нормально, и этот дизайнсделает бизнес-логику многократно используемой на разных платформах.Единственная причина, по которой я не могу полностью отказаться от ContentProviders, заключается в том, что некоторые компоненты системы Android ожидают, что вы предоставите данные как ContentProvider (например, Search).
Буду признателен за любые советы о том, как вы справились с этимПрограммы.Заранее спасибо.
РЕДАКТИРОВАТЬ:
Пока не так много ответов.Какие-нибудь советы по повторному использованию кода между различными платформами?Или, может быть, мне нужно перефразировать мой вопрос?(Извините - я новичок в SO. Не уверен, что протокол для "напоминаний").