7

我的“干净架构”Android 应用程序中有 3 个 gradle 模块:“数据”、“域”和“演示”。'data' 和 'presentation' 都依赖于 'domain',但不相互依赖。'presentation' 保存应用程序类的实现,而 'data' 保存一些存储库单例的实现。

我想使用 Dagger 2 在应用程序中实例化存储库,但在这种情况下,我需要在“数据”和“演示”之间建立间接的 gradle 依赖关系。从 Clean 架构的角度来看,这种依赖关系看起来很丑陋,这使得从“表示”访问“数据”成为可能。将 Dagger 组件和模块代码放在单独的 gradle 模块 'di' 中会创建循环 gradle 依赖项 'data' -> 'di' -> 'data'。

是否有适当的方法将所有 DI 代码移动到单独的模块中?

4

1 回答 1

0

我认为在“演示文稿”和“基础设施”(在您的情况下为“数据”)之间建立依赖关系并不是一个坏习惯。

您可以将所有技术依赖项放在基础设施层并从应用程序层调用它(在您的情况下为“演示”)。

这是因为,在某些情况下,您需要调用基础设施而不调用域层:如果您没有业务规则。

干净架构中最重要的事情是将域与所有其他事物(尤其是技术事物)分开。

您还可以在同一个模块中拥有应用程序层和基础设施层。

有了这些依赖,你就没有循环依赖:

application -> domain 
application -> infrastructure
infrastructure -> domain

如果你有以下依赖,你可以拥有它:

domain -> infrastructure

也就是说,你不应该在应用层实例化 Dagger 类。所有的数据访问实例都必须在基础设施层。您可以从应用程序调用数据访问接口,并在基础设施层使用 Dagger 实现它。

于 2020-06-27T12:09:28.377 回答