房间:添加附加功能 packages/modules

Room : Adding additional feature packages/modules

问题

我希望为我的项目添加额外的功能,基于 Room instantapp,我不确定这样做的最佳策略。是否应该在现有模块 Feature A 或新的单独模块 Feature B 下提供额外的 "activities"。由于新代码将依赖于 Feature A 中已经定义的实体和 POJO,我可以将这些 类 提取到 base 模块中,还是应该设置一个单独的 database包含它们的模块 ?

背景 (TL;DR)

我目前对Android项目结构的理解如下。 Android Studio 为新应用程序生成大致两种结构。

这些模块的组织方式如下:

每个模块如下相互继承(根据 gradle 构建文件中的 implementation ("MODULE") 行确定)。

            base
             |
             V
          Feature A
          /       \
         V         V
        app    instantapp

好奇心

base模块

base 应该会生成一个 AAR 文件。也就是说,它创建了一个可以在其他模块中导入的 Android 库。从文档看来,最好在 gradle 构建文件中使用 api 宏导入此类模块,但 Feature A 的库存构建文件使用 implementation宏代替。这是有原因的吗?

每个特征的实体数

其他框架(例如 Django)允许 Feature X 模块定义它们自己的实体,这些实体通过简单地包含模块来包含在主数据库中。这可以用匕首或可能的 Kotlin 扩展来完成吗(我对匕首一无所知,但它似乎支持可能用于此目的的依赖注入)?

我总是喜欢将数据库集中为一个单独的模块。这样任何人都可以使用数据库表,而且他们将是松散的一对,这意味着如果有人以前使用过 sqlite 并想迁移到 RoomDatabase,那么只能修改 1 个模块,而所有其他模块都保持不变。这是 1 个示例架构。 https://github.com/ankitthakur/MobileSecurity-Android

事实证明,我可以将所有内容提取到 base 模块中,而无需创建专用的 database 模块。这是一个新项目,因此没有必要像 Ankit Thakur 所建议的那样纯粹为数据库创建一个单独的模块,我已将其标记为已回答问题。我的结构现在如下:

      base
     /    \
feature  feature
     \    /
 app/instantapp

base 提供 databasequerysetentities 以及 repository 类。每个功能处理 modelactivity 类 以及任何 fragmentsadapters.

陷阱

将 类 从原始功能转移到 base 模块的一个错误是,虽然 feature 模块导入了 Kotlin,但基础模块没有。所以我只是在基本模块下创建了一个 kotlin 文件,然后 IDe 发现它应该将 kotlin 支持添加到 base gradle 文件,并在依赖项部分下添加了以下行gradle 构建文件。

dependecnies { ... 
   implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
... }

base模块

目前,基本模块是否包含在 implementationapi 宏中似乎并不重要。我将其保留为默认 implementation(":base").

每个特征的实体数

稍后我会将其扩展到另一个问题(或 link 我发现的任何现有问题)。