应用层是否应该依赖于DDD中的基础设施层?

时间:2017-01-25 09:18:52

标签: domain-driven-design

我读到应用程序服务用于编排,它们处理应用程序的工作流程。

例如:在将钱从用户A转移到用户B后,系统必须发送电子邮件。

因此,应用程序服务调用域实体,域服务来处理域逻辑。然后致电基础设施发送电子邮件然后,应用层依赖于域层和基础架构层。它会违反DDD吗?应用层是否应该依赖于DDD中的基础设施层?

4 个答案:

答案 0 :(得分:3)

  

应用层是否应该依赖于DDD中的基础设施层?

我相信您正在寻找的模式是"服务提供商"。

应用程序组件将定义它需要满足的接口/ api / contract以履行其自己的职责

基础架构组件提供此接口的实现

组合根创建基础结构组件,然后使用它来创建应用程序组件。

在应用程序的自动化测试中,您可能会包含域组件,但用测试双重替换基础架构组件。

答案 1 :(得分:1)

在考虑分层体系结构时,通常存在严格或轻松的分层体系结构之间的区别。

在宽松的分层方法中,“允许”一层访问任何下层,而不仅仅是下面的层(这将是严格的方法)。

在我个人看来,转发的方法是实用的,并且完全可以使用DDD - 不应该与图层教条。

我们举例决定放松的方法,并按照你描述的方式使用它。从应用程序服务中,我们通过利用域层的构建块以及基础架构组件(即用于电子邮件等通知)来协调用例。

PS:以上只是作为一般澄清,如果它违反了DDD。当然,您应该在技术上通过使用DI来防止层的紧密耦合,可能还有策略模式,......

答案 2 :(得分:1)

Should application layer depend on infrastructure layer in DDD?

是的,你可以!应用服务声明对执行域逻辑所需的基础设施服务的依赖。

但是如果你可以通过使用接口来避免它,那么更多的隔离(端口、适配器)会更好

答案 3 :(得分:0)

我认为这不会违反任何DDD原则,但我不是DDD纯粹主义者,所以我不确定。

也许这会有所帮助:http://dddsample.sourceforge.net/architecture.html

"除了三个垂直层外,还有基础设施。如图所示,它以不同的方式支持所有三个层,促进层之间的通信。"

我认为电子邮件服务将被视为外部服务,因此属于基础架构。