【发布时间】:2018-08-24 07:35:16
【问题描述】:
我已经研究了几个星期的洋葱架构,我偶然发现了一个技术难题。
当我说“模块”时,请注意我指的是项目的概念。更清楚地说,它兼容: module = .NET 程序集/Java gradle 模块
到目前为止,我在大多数 Onion 架构项目中都看到了 2 种模块模式,它们是:
1 - 每一层都有自己的模块,所以它会有:
- 域实体
- 域接口
- 服务接口
- 服务
- 基础设施数据
- 基础设施日志记录
- ui
2 - 所有相关模块都封装在一个模块中:
- 核心(域实体、域接口、服务接口、服务)
- 基础设施(基础设施数据、基础设施日志记录)
- ui
第二种方法对我来说更直接,但我不确定它是否会在未来导致依赖性问题。有什么建议吗?
【问题讨论】:
-
我认为没有明确的“正确”方式。我倾向于使用与您的 option 2 类似的东西,直到我需要拆分功能。在这种情况下,这些位开始向选项 1 移动。我发现从 选项 1 开始会导致移动部件太多。
-
我同意从选项 1 开始不是一个好主意,因为您提到的原因。我担心我最终会得到一个臃肿的核心和一个臃肿的基础设施,但正如你所说,如果需要,我可以拆分新功能/基础设施问题。谢谢埃本!
-
@ViníciusM.Freitas 解决方案 1 中可能存在循环引用。另外,您指的是哪种 服务?
-
@guillaume31 - 我不认为可能存在循环引用,因为所有依赖项都指向中心,因此,每一层只能依赖内层,而不能依赖外层。我指的服务是域服务。您能否详细说明第一种方法如何导致循环引用?
-
我以为它们是应用程序服务——顺便问一下,你有吗?即使使用单独的域服务模块,您也可以拥有实体(取决于)存储库接口(取决于)实体。
标签: design-patterns domain-driven-design onion-architecture