Android - Использование Dao Pattern с contentProvider - PullRequest
14 голосов
/ 15 февраля 2011

Правильно ли использовать ContentProvider с шаблоном Дао.?или это принесет какие-либо проблемы с производительностью?

Я постараюсь объяснить.У меня есть контент-провайдер.деятельность, дао и боб ..

это код:

class Bean(){

 String name;

}

class Dao{

 Activity activity;

 public Dao(Activity activity){

 this.activity = activity;

public List<Bean> getAllBean() {

    Cursor c = activity.managedQuery(Bean.CONTENT_URI, PROJECTION,
                null, null, Bean.DEFAULT_SORT_ORDER);
    return BeanMapper.GetAllFromCursor(c);
    }
}

}

Class Activity{
.....


 onCreate(....){

  Dao dao = new Dao(this);
  List<Bean> aList = dao.getAllBean();

}
....}

что вы думаете?

С уважением

1 Ответ

35 голосов
/ 08 марта 2011

DAO предназначен для предоставления абстрактного интерфейса к базе данных. ContentProvider уже делает это.

Да, вы можете создать второй уровень абстракции для предоставления API DAO, но ... Вы программируете на мобильном устройстве. Использование API ContentProvider напрямую будет более эффективным. Есть много примеров этого. Например, посмотрите, насколько тесно связаны Cursors и ListViews. Посмотрите на классы CursorAdapter, и вы увидите, как он предназначен для непосредственного сопоставления курсора базы данных со списком на экране. Посмотрите на ContentObserver и посмотрите, как он предназначен для push-уведомления курсора на обновление, чтобы он соответствовал измененной базе данных, и, в свою очередь, обновите один элемент списка в ListView, чтобы отразить эту базу данных при ее изменении в реальном времени ...

Вы потратите огромные усилия на то, чтобы заново изобрести колесо, пытаясь заставить весь этот существующий код выполнить модель DAO. Я не знаю ваше заявление, но я не уверен, что вижу преимущество, которое вы получаете от него.

...