2013-09-13 4 views
9

Я использую контент-провайдер для управления данными своих приложений, которые не используются другими приложениями. Тем не менее, существует некоторый шаблонный код, например, перевод курсора на объект домена. ORMLite обеспечивает более элегантный способ непосредственного сопоставления записи базы данных с объектом домена. Поэтому я хочу заменить поставщика контента ORMlite. Но у меня есть некоторые проблемы:Android ContentProvider vs ORMLite

  1. Поставщик контента прекрасно работает в среде с несколькими потоками. Я не знаю, является ли ORMlite потокобезопасным.
  2. Поставщик контента может транслировать изменение базы данных. Я не знаю, поддерживает ли ORMLite такую ​​поддержку.
  3. Android-провайдер некоторых утилит, таких как AsynQueryHandler, CursorLoader для асинхронного запроса к базе данных. Если я использую ORMLite, я должен явно создать поток или AsyncTask для выполнения запроса.

Должен ли я заменить поставщика контента на ORMLite?

ответ

15

Я не думаю, что вы можете сравнить с ORM с поставщиком контента. ORMLite предлагает следующие функции link пользователю и имеет отдельную цель при разработке.

Но помимо того, что вы упомянули, это пара других преимуществ поставщика контента.

  1. , если вы хотите поделиться датой между несколькими приложениями или процессами. Может быть, сейчас у вас нет плана сделать это, но похоже, что приложение сильно загружено в базу данных, а в будущем, если вы планируете делиться своими данными с третьим лицом или другим вашим приложением, у вас есть опция с поставщиком контента.

  2. Поставщик контента является стандартным для всех выпусков Android, что также означает, что ваше приложение безопасно с этим. Я уверен, что ORMLite тоже стабилен. Но вы действительно хотите принять такой риск, особенно если это не сэкономит ваше время, или у вас нет каких-либо бизнес-требований для этого. Android API уже фрагментирован, вы хотите взять на себя еще одну нагрузку?

  3. если вы хотите данные загружать в облако легко интегрируется с SyncAdapter

  4. Использование Android функции безопасности и разрешения.

Вы правы в отношении дополнительного кода, необходимого для обработки Контент-провайдера.

Сейчас я работаю над проектом, у нас около 20 таблиц. Я создал DAO для каждой таблицы. Что в основном использует контент-провайдер.

DAO-> Содержание Provider-> SQL Lite Open Helper

Class XyzDao{ 
    private final Context mContext; 
    XyzDao(Context context){ 
     this.mContext=context; 
    } 
    public String getMyData(){ 
     //content provider code 
     return myData; 
    } 
    public void setMyData(String x, int y, double z){ 
     //content provider code to set the data 
    } 
} 

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

  • асинхронной операции
  • Простая интеграция с платформой/облака.
  • Меньше кода менее ошибка тем меньше драмы (думает, что если у меня есть для выполнения этих задач, которые мы только что обсудили)

И самая лучшая часть из любой деятельности я могу просто использовать мой DAO для доступа к базе данных.

Кроме того, вы можете напрямую получить доступ к SQLLiteOpenHelper из вашего DAO.

В конце дня каждый выбор зависит от вашего бизнес-требования. Если у вас много объектов персистентности, ORMLite может быть хорошим выбором.

+0

Эй, не знаю, является ли поставщик контента потокобезопасным? – toidiu

1

С одной стороны, я предпочитаю делать модель ER с использованием OrmLite, с другой стороны ContentProvider предоставляет некоторые преимущества, как описано выше. Вот почему я внедрил универсальный ContentProvider, который позволяет иметь доступ к модели OrmLite ER. Здесь находится https://github.com/blandware/android-atleap

0

Я создал библиотеку ORM, которую вы можете использовать, которая в основном сочетает в себе оба варианта использования: CPOrm и сделает то, что вам нужно. Вы можете использовать его для управления созданием и запросом своей базы данных, и все это делается через поставщиков контента для Android. Производительность также хороша, и запросы возвращают 9000+ результатов в секунду.

Смежные вопросы