android - 关于一个应用程序中的多个模块(带 Activity 的库)

标签 android module dependencies

我必须制作一款功能强大的应用。这些功能可以根据客户的不同而增长。我想有两个不同的功能模块/项目,但只有一个应用程序/apk。我有一个仪表板模块,它有一些按钮可以打开许多其他功能(它们的 Activity )。真的可以像这样拥有一个应用和多个模块吗?

我在看this video作为引用。我想,也许,从那个视频来看,通用模块是适合我的应用程序。 buyer-project 和 seller-project 可以是库。

然后,我画这个图来问这个问题。 diagram

所以,在图中,我有一个仪表板模块。仪表板模块具有打开其他功能的按钮(比如 musicPlayer、imageEditor、fileManager 等)。而且,我还有一个 Common/Base 模块,它将托管所有模块和应用程序本身所需的基本功能。

因此,在这种情况下,仪表板模块依赖于功能模块。并且,Feature 模块依赖于 Common/Base 模块。

我认为 Dashboard 模块将通过其中一个 Feature 模块访问 Common/Base 模块,但它没有用。我无法从 Dashboard 模块访问 Common 模块中的类。

那么,现在,我必须将 Common 模块的依赖添加到 Dashboard 模块中,对吗?

Dashboard -> Common
Dashboard -> Feature_1 -> Common
Dashboard -> Feature_2 -> Common
Dashboard -> Feature_3 -> Common
Dashboard -> Feature_4 -> Common

如您所见,Dashboard 模块直接需要 Common 模块,您认为它会与 Feature 模块中的 Common 模块发生冲突吗,为什么或为什么不?

而且,将来如果功能模块必须相互访问,那将是一个糟糕的设计,对吧?有循环依赖?

circular_dependencies

我不知道这个实现是否是一个好的方法。我该如何处理?这是我第一次尝试模块。

最佳答案

如果您创建一个启用了“instantapp”的新 Android 应用程序,那么 Android 将设置以下结构:

    base
     |
   feature
   /     \
 app   instantapp

您的案例是通过将 base 替换为 common 并将 dashboard 视为附加功能来处理的。

           common
          /   |   \          ...\
   feature feature feature ...   dashboard
          \   |   /          .../
             app

您的仪表板 应该是一个简单的 View ,引用显示在其上的摘要。这些摘要实际上应该由各自的功能处理,因为它们可以访问相关的模型组件,并且最适合为仪表板提供摘要。这应该使得 dashboard 不必导入 common 模块。

两个高度相互依赖的 feature 要么作为一个单一的功能更好,即将它们合并在一起,要么分成三个组件,包括一个公共(public)组件和剩下的任何部分原来的两个特征。

            common
            /    \          ...\
  sub.feature    feature ...   dashboard
   /       \        /          /
feature feature    /          /
      \     \     /       .../
       ------ app

如果您的 dashboard 模块确实需要导入 common 模块,这样做应该没问题,大多数语言都处理 common 的情况> 由每个 feature 进行的导入不会破坏稍后由 dashboard 进行的相同导入。如果语言不支持这一点,那么您必须考虑使用 private/public 声明来隔离它。

关于android - 关于一个应用程序中的多个模块(带 Activity 的库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48057342/

相关文章:

android - 如何在Android Studio项目中添加Hamcrest库?

android - GCM 如何注销设备与 GCM 和第 3 方服务器

Android map 错误 "Could not find class ' android.app.AppOpsManager'”

Android 微调器提示

javascript - 从模块导出的变量在 Angular 类的函数内部无法访问

c++ - 依赖行者 : Error Opening File

android - 如何从 React-Native 获取 onresume 事件?

python - 从单独的文件继承 BaseClass

python - 哪个 Python 模块适合列表中的数据操作?

silverlight - 将转换器与 DependencyProperty 结合使用