【问题标题】:Make repository invisible in domain layer of Clean Architecture使存储库在 Clean Architecture 的域层中不可见
【发布时间】:2019-06-20 05:49:58
【问题描述】:

我最近听说并研究了清洁架构,并试图自己实现它以深入了解它,我知道 模块(层)具有逻辑并且应该具有一些接口以及使用存储库的用例。据我所知,Domain 层无法访问任何其他层,但 DataPresentation 层可以访问 层,但不相互。

我的存储库定义(接口)在 Domain 模块中,它们的实现在 Data 模块中,然后由 Dagger 注入。另外,我有一些 UseCases 注入了一些存储库。

我遇到的问题是,Presentation 模块可以访问存储库接口和用例,因为它们都在 Domain 模块中,并且通过 gradle 导入Presentation 层。

我不认为在 Presentation 模块中同时访问两者会很好,我使用 Kotlin 和 internal 关键字来隔离每个模块的类,但作为 Data 模块需要访问存储库接口来实现它们,我不能为它们使用 internal 关键字,所以它们现在暴露了。

我的问题是,是否有可能以某种方式更改设计以仅公开用例?

【问题讨论】:

  • 表示层可以访问接口真的有问题吗?当然,你可以将接口放在单独的模块中,只让用例和数据依赖它,但这真的值得增加复杂性吗?
  • 不是这样,但它违反了清洁架构原则,让开发人员对应该使用哪一个感到困惑?用例还是存储库?

标签: android kotlin clean-architecture


【解决方案1】:

如果UseCase与数据相关(例如ReadUserUseCase),那么它的接口应该留在domain模块中,实现应该移动到data模块中。

【讨论】:

  • 是的,但是正如我在各处看到的那样,您需要在域层中拥有它们的接口(而不是实现)。换句话说,如果我将存储库接口放入数据层,因为域层应该对数据层或表示有任何依赖关系,那么我无法访问我在 UseCases 类中的存储库。
  • 抱歉,我误读了这个问题,并认为您的domain 模块依赖于data。现在我看到它是另一种方式,所以我正在编辑我的答案。
  • 但是正如我从 Clean Architecture 中了解到的,业务逻辑应该在 Domain 模块中,您的方法是不是违反了 Clean Architecture 原则?
猜你喜欢
  • 2017-08-28
  • 1970-01-01
  • 2022-05-06
  • 2016-04-24
  • 2020-06-18
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多