android - 为什么我们需要在 Android 多模块化架构中将 DI 布线与实现分开?

标签 android dagger-2 square

Square Inc. 在 Droidcon SF'19 上展示了其内部模块化架构:
https://www.droidcon.com/media-detail?video=380843878
但是,我对一些子弹有点困惑。请你帮助我好吗?

  • 为什么他们实际上需要:wiring模块?我发现它增加了复杂性:
  • 您会为每个新功能获得额外的 gradle 模块
  • 你必须对你的 进行某种全局注入(inject)。 fragment 某处:app , 因为 fragment 定义于 :impl模块无法访问它的 Dagger 组件 ,在 :impl-wiring 中定义模块。 :impl不依赖于 :impl-wiring , 因为依赖是相反的。
  • 您不能拥有 Android 动态功能模块,因为他们应该知道它是 Dagger 组件 为了注入(inject)它的 fragment .但是没有办法从 :app 进行这种注入(inject)模块,它是动态功能的基础模块。

  • 那为什么 :wiring模块?
    可以合并:impl:impl-wiring , 或 :fake:fake-wiring一起消除上面提到的所有问题。而且,在 :demo-apps一个人可能只依赖于 :impl:fake``, and not on :impl-wiring (or :假接线```)。

    最佳答案

    这种类型的模块的创建是为了进一步分离。通过这个,您可以生成您使用的组件类型(koin、dagger)以及如何使用的抽象。如果项目很大,这样做是有意义的。

    目前,我在模块之间生成以下依赖流:
    警告:仔细检查方向性。

  • :feature-A:open <- :feature-A:impl -> :feature-A:impl-wiring
  • :feature-A:impl-wiring -> :feature-A:impl, :feature-A:open
  • :app -> :feature-A:open, :feature-A:impl-wiring

  • 我仍然不确定应用程序是否应该依赖 open impl-wiring , 或者哪个应用应该只依赖于 openopen来自 impl-wiring .

    关于android - 为什么我们需要在 Android 多模块化架构中将 DI 布线与实现分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64661640/

    相关文章:

    android - 获取已安装应用程序的列表,很简单。但如何启动其中之一呢?

    android - WebView 缩放按钮 Controller

    android - 如何制作可以启动我的 Robotium 测试的 APK?

    c++11 - 向量的分段平方,C++ Eigen 中两个向量的分段乘积

    android - 获取数据(异步)并填充 ViewPager 的 fragment

    android - Dagger2多模块设计

    android - Dagger2 如何@Provide 一种具有两种不同实现的类型

    java - 是否可以将子组件依赖注入(inject)到父组件中?

    android - 在空属性上改造 SimpleXMLConverter NumberFormatException

    OpenCV检测背景困难的方 block