Два контент-провайдера обращаются к одной и той же базе данных

Привет всем!

Интересно, есть ли в целом предпочтительная парадигма реализации, которую следует уважать, если вы хотите, чтобы два совершенно разных приложения для Android обращались к одной и той же базе данных и работали с ней? Рекомендуется ли или даже технически возможно сделать это вообще? Как будет выглядеть такая архитектура?

На данный момент я рассматриваю возможность реализации двумя приложениями своих собственных ContentProvider (оба ContentProvider будут обращаться к одной и той же базе данных, но гарантированно никогда одновременно). Я также думал о создании одного общего поставщика контента и позволяю обоим приложениям использовать его при доступе к базе данных. Я предпочитаю первый пример, но не отказываюсь полностью от последнего.

ОБОСНОВАНИЕ:
У меня есть два приложения, которым требуется доступ к общей базе данных. Сама база данных хранит данные, но также описывает взаимосвязь между строками данных, обычно описывая набор «форм», где содержимое формы; Элементы пользовательского интерфейса, такие как текстовые поля, кнопки и различные виды списков, можно настраивать. Оба приложения используют эти «данные описания» в базе данных для создания частей соответствующего пользовательского интерфейса приложения во время выполнения.

Следовательно, есть два аспекта двух приложений: один «административный» аспект (управление структурой данных и отношениями между строками данных) и один «общий пользовательский» аспект (чтение/изменение фактических значений данных). Это осознанный выбор разделить эти два аспекта в отдельных приложениях.

ПРИМЕЧАНИЕ! Значения данных отделены от структуры данных, т.е. значения хранятся в одной отдельной таблице, а структура описывается в другой таблице. . Это означает, что два приложения будут существенно изменять две разные таблицы в одной и той же базе данных и никогда, так сказать, не изменят «другую таблицу».

Мы очень признательны за любые мысли. Приложение пока находится на стадии планирования, поэтому сейчас самое время внести фундаментальные изменения.


person dbm    schedule 30.01.2011    source источник


Ответы (1)


Дбм,

Да, это принято, поощряется и возможно на Android. У вас есть третий вариант (который, без сомнения, даст мне несколько горячих комментариев), и он заключается в том, чтобы поместить ContentProvider (1) в APK целиком. Но, учитывая, что у вас всего 2 типа, вы можете перевернуть четверть того, на каком apk он размещен. Я бы выбрал приложение администратора, но это субъективно с моей стороны.

Если вы возьметесь за создание двух приложений, то у вас есть «априорные» знания о том, что будет делать каждое из них и с какими данными каждое из них может работать. Поэтому я бы заключил единый интерфейс CP и просто ограничил вызовы каждого приложения с учетом описанного вами поведения.

откровенный

person Frank C.    schedule 30.01.2011
comment
Спасибо за быстрый ответ. Я нахожу идею с размещением ContentProvider в собственном APK немного смелой, но я не могу сразу отказаться от нее (это что-то интригующее в этой идее, она держит мое внимание как завороженное) :-) Есть ли что-нибудь, чтобы выиграть поместить его в собственный APK? Я вижу некоторые проблемы, если CP APK отсутствует на цели. Затем мне, возможно, придется реализовать какие-то концепции изящной деградации в клиентах (APK администратора и пользователя). - person dbm; 30.01.2011
comment
@dbm Я бросил это в рагу, так как это оказалось третьим вариантом. Если вы не хотите иметь исключительную гибкость в сегментации сборки-выпуска, я не знаю (не думал), что вам даст 3-й APK. Интерфейс CP может быть открыт независимо от того, где он находится. Если бы DB/CP представляла собой набор информации для общего пользования, который требовал бы регулярных обновлений, я бы предпочел сделать его собственным APK по причинам развертывания. - person Frank C.; 31.01.2011
comment
@dbm Нет проблем... интересно узнать, как вы приняли свое решение? - person Frank C.; 01.02.2011
comment
Думаю, я немного поэкспериментирую с обоими решениями. Но на данный момент я нахожу решение только с двумя APK немного более привлекательным. Таким образом, я вижу уменьшение зависимостей (ни одно из двух приложений не зависит от предустановленного APK ContentProvider) и гораздо более четкое разделение между административным и пользовательским приложениями, что, в конце концов, является святым Граалем в данном случае :-) - person dbm; 01.02.2011