【问题标题】:About multiple modules(library with activities) in one application关于一个应用程序中的多个模块(带有活动的库)
【发布时间】:2018-12-03 16:49:40
【问题描述】:

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

我正在观看 this video 作为参考。我想,也许,从那个视频中,common-module 对我来说是应用程序。买方项目和卖方项目可以是库。

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

所以,在图中,我有一个仪表板模块。仪表板模块具有打开其他功能的按钮(例如 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 模块发生冲突吗,为什么或为什么不呢?

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

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

【问题讨论】:

    标签: android module dependencies


    【解决方案1】:

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

        base
         |
       feature
       /     \
     app   instantapp
    

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

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

    您的dashboard 实际上应该是一个简单的视图,它引用了上面显示的摘要。这些摘要实际上应该由相应的功能来处理,因为它们可以访问相关的模型组件,并且最适合为仪表板提供摘要。这应该使dashboard 无需导入common 模块。

    两个高度相互依赖的feature 要么作为一个单独的功能更好,即将它们合并在一起,要么分成三个组件,包括一个公共组件和原始两个功能的剩余部分。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多