两个内容提供商访问同一个数据库

3

大家好!

如果想让两个完全不同的Android应用程序访问和操作同一个数据库,是否有一种通常首选的实现范例?这样做是否被推荐或甚至技术上可行?这样的架构会是什么样子?

目前,我正在考虑让这两个应用程序各自实现自己的ContentProvider(这两个ContentProvider都将访问同一个数据库,但保证永远不会同时进行)。我也考虑过构建一个共同的内容提供程序,并在访问数据库时让这两个应用程序都使用它。我更喜欢第一个示例,但并未完全放弃后者。

原因:
我有两个需要访问共同数据库的应用程序。数据库本身存储数据,但也描述了数据行之间的关系,通常描述了一组“表单”,其中表单内容;UI元素如文本框、按钮和各种列表,是可定制的。两个应用程序都使用数据库中的这些“描述数据”在运行时生成各自应用程序的部分UI。

因此,这两个应用程序有两个方面:一个是“管理”方面(管理数据结构和数据行之间的关系),另一个是“通用用户”方面(读取/修改实际数据值)。故意选择将这两个方面分别放在不同的应用程序中。

注意!数据值与数据结构分开存储,即存储在一个单独的表中,而结构在另一个表中描述。这意味着这两个应用程序基本上会修改同一个数据库中的两个不同表,并且它们永远不会修改“另一个表”,可以说是互不干扰。

欢迎提出任何想法。该应用程序仍处于规划阶段,现在是进行根本性更改的时候。

1个回答

1

Dbm,

是的,在Android上可以接受、鼓励和实现。你有第三个选项(毫无疑问会引起一些激烈的评论),那就是将ContentProvider(1)放在一个独立的APK中。但是,考虑到你只有两种类型,你可以抛硬币决定它由哪个apk托管。我会选择管理员应用程序,但这是主观的。

如果你要费力创建两个应用程序,那么你就“先验地”知道每个应用程序的行为以及它们可以操作的数据类型。因此,我会得出一个单一的CP接口,并根据你描述的行为限制每个应用程序调用的内容。

Frank


感谢您的快速回答。我觉得将 ContentProvider 放在自己的 APK 中的想法有点勇敢,但我不能立刻排除它(这个想法很有趣,就像被咒语迷住了一样)。把它放在自己的 APK 中会有什么好处吗?如果目标上没有 CP APK,那么我可能需要在客户端(管理员和用户 APK)中实现某种“优雅降级”概念。 - dbm
@dbm 我将它加入到炖菜中,因为它似乎是第三个选项。除非你想在构建->发布分段中具有极大的灵活性,否则我不知道(也没有考虑过)第三个APK可以为你带来什么。CP界面可以暴露在任何位置。如果DB / CP是用于一般用途的信息收集,并且需要定期更新,我会选择将其作为自己的APK进行部署。 - Frank C.
@dbm 没问题...好奇你在决定中选择了哪种方式? - Frank C.
我想我会在两种解决方案上都进行一些实验。但目前我觉得“仅两个APK”的解决方案更具吸引力。这样,我可以减少依赖性(两个应用程序都不依赖于预安装的ContentProvider APK),并且在管理员应用程序和用户应用程序之间有一个更清晰的区分,毕竟这是本例中的终极目标 :-) - dbm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接