首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于dagger2的多层/库体系结构:设计范围、组件、模块

基于dagger2的多层/库体系结构:设计范围、组件、模块
EN

Stack Overflow用户
提问于 2017-05-04 12:57:06
回答 1查看 393关注 0票数 0

我在一个multi-layered多库 Android项目中使用匕首2

我正在不同层次(数据、业务逻辑、表示等)上开发许多不同的库。用匕首把它们粘合在一起。

我最重要的要求是,架构的每个库都应该是可用的、独立的(以及它的依赖组件),并且开发人员应该决定在他想要的任何层之上构建:

例如:

  • 使用下面的所有内容重写所有表示层
  • 随意替换堆栈的任何部分,以增强或更改行为

现在,我已经为每个库创建了一个带有自定义作用域的Dagger组件,但有时我有一个依赖于2-3个其他组件的组件,Dagger抱怨只有一个依赖组件的作用域。(Es。域层使用服务组件从公司服务获取数据,使用传感器组件获取设备传感器数据/连接或其他任何信息)。

我无法摆脱作用域,因为我需要这些组件的作用域/单例。

我目前的解决方法是将依赖项组件传递给模块构造函数,但是这看起来像一个解决方案,我想知道用Dagger 2来满足这种需求的正确方法。

复杂性也不是很好的扩展,替换中间的一个模块需要扩展一个模块来代替实现,这一点对用户来说一点也不友好。

我读过关于子组件的文章,但是看起来这些组件不能单独使用,除非您为每个组件编写一个组件,否则它们也声明了实际实现的模块,所以它们不能被其他实现所替代。

是否可以与dagger、共享他们的体系结构,用其他开发人员用来组装部件和重用组件的库项目来详细阐述这些概念?

(这个问题最初是关于https://github.com/google/dagger/issues/636问题跟踪器的,但是被关闭了,指向堆栈溢出-仅使用模块也不合适,因为这要求库的用户知道要组装哪个模块,以及如何组装,我也无法设置不强制特定实现的模块依赖项)

EN

回答 1

Stack Overflow用户

发布于 2017-05-06 22:02:02

我很抱歉,但我认为这个想法行不通,因为需求有点矛盾。

即:

我不能只提供模块而不能提供组件(正如Dagger 2问题跟踪器上的线程所建议的那样)

我最重要的要求是,架构的每个库都应该是可独立使用的(以及它的依赖组件),并且开发人员应该决定在他(或她)想要的任何层之上构建。

在一起设计是非常困难的。Dagger 2在编译时使用静态代码生成。组件需要了解它们的子组件,或者,依赖组件需要了解它们的父母。要有一个交钥匙Dagger 2解决方案,使用者所做的就是从组件中调用inject,您需要至少部分地设置对象图。这将使您难以实现所需的模块化。

因此,我认为关于问题跟踪器线程(只提供模块并让消费者设置组件)的建议是正确的解决方案。您可以使用自己的范围注释和/或JSR-330 @Singleton等注释来提供提示,说明库的使用者应该如何设置对象图。

最后,阿米尔·齐亚拉蒂最近发布了一个使用Dagger 2的带有多个模块的Android项目的示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43783527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档