关于一个应用程序中的多个模块(带有活动的库)

时间:2018-01-02 07:45:08

标签: android module dependencies

我必须创建一个具有强大功能的应用。功能可以根据客户端增长。我希望有两个不同的模块/项目的功能,但单个app / apk。我有一个仪表板模块,其中包含可打开其他功能(按活动)的按钮。是否真的可以拥有一个应用程序,以及这样的多个模块?

我正在关注this video作为参考。我想,也许,从那个视频来看,通用模块是我的应用程序。买方项目和卖方项目可以是图书馆。

然后,我绘制此图表来提出问题。 diagram

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

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

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

所以,现在,我必须将Common模块的依赖项添加到Dashboard模块中,对吧?

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

正如您所看到的,仪表板模块需要直接使用Common模块,您是否认为它会与Feature模块中的Common模块发生碰撞,为什么或为什么不?

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

circular_dependencies

我不知道这种实施是否是一种好方法。我该怎么办呢?这是我第一次尝试模块。

1 个答案:

答案 0 :(得分:0)

如果您创建一个启用了“ 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模块,则可以这样做,大多数语言都将每个{{1} }不会掩盖后来通过说common而进行的相同导入。如果该语言不支持此功能,则必须考虑使用feature / dashboard声明将其隔离。