DDD结束运行,应用程序层调用不直接位于其下的另一个

时间:2018-07-31 15:14:52

标签: model architecture domain-driven-design

Evans DDD书中有一幅图像,显示了访问不同应用程序层的UI。

DDD Evans book image

根据史蒂夫·史密斯(Steve Smith)在其Pluralsight“ n层设计”课程中的描述:

“最终运行是指一个应用程序层调用不直接在其下面的另一层。这样的最终运行破坏了利用N层应用程序设计的优势,从而导致应用程序具有所有缺点和复杂性。 N层设计,无其优势。”

在同一个Pluralsight中,Smith在其“ DDD基础知识”课程中,使某些控制器直接访问存储库(在下文中),使控制器的行为就像某种应用程序服务,用于协调存储库访问和域对象。

我的问题是: Evans的书展示的图像是,在DDD中,不限于遵循特定的分层体系结构FLOW,而是利用不同的层来保护域并简化代码。如果适合我们的要求,我们可以自由地直接访问不同的应用程序层,限制是我们将Domain关注点限制在Domain中以保护我们的模型?

此图片代表正确的DDD方法吗?

Is this correct in DDD?

1 个答案:

答案 0 :(得分:1)

enter image description here

  

此图片代表正确的DDD方法吗?

我将其称为可接受方法。在2003年,埃文斯(Evans)撰写第一本书时,分层被认为是当时的最佳实践-如果您愿意,可以将关注点分离。

最近,趋势已经远离分层。例如,请参见Udi Dahan的演示文稿。

  

我如何向您证明这些层之间是紧密相连的...?

     

谁–当企业来找他们并要求他们在给定字段中添加另一列时–谁不得不触摸他们的代码库中的多个层次?

重要的思想不是“层次”,而是确保域逻辑是紧密组织的。

例如,如果您的应用程序正在围绕域模型进行访问以正确地更改基础数据,那就不好了。如果应用程序正在使用领域模型来读取底层数据-可能没什么大不了的(请参见)。

当您研究洋葱架构或端口和适配器时,“分层”方法变得更加困惑。

我目前的看法是,针对通常将图层重新移植到不同实现中的情况,优化了干净图层。我的经验是,这些情况不是特别常见。因此,与使设计扩展更容易的方法相比,投资可能性很小。