Model DDD结束运行时,应用层调用不在其正下方的另一个应用层

Model DDD结束运行时,应用层调用不在其正下方的另一个应用层,model,architecture,domain-driven-design,ddd,cqrs,Model,Architecture,Domain Driven Design,Ddd,Cqrs,EvansDDD书中有一个图像显示了访问不同应用程序层的UI Steve Smith在他的Pluralsight“n层设计”课程中说: “结束运行是指一个应用程序层调用不在其正下方的另一个应用程序层。这样的结束运行破坏了使用N层应用程序设计的优势,导致应用程序具有N层设计的所有缺点和复杂性,而没有任何优势。” 在同一个Pluralsight中,Smith在他的课程“DDD基础知识”中使一些控制器直接访问存储库(infra),使控制器的行为类似于某种应用程序服务,协调存储库访问和域对象 我的问题

EvansDDD书中有一个图像显示了访问不同应用程序层的UI

Steve Smith在他的Pluralsight“n层设计”课程中说:

“结束运行是指一个应用程序层调用不在其正下方的另一个应用程序层。这样的结束运行破坏了使用N层应用程序设计的优势,导致应用程序具有N层设计的所有缺点和复杂性,而没有任何优势。”

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

我的问题是: 埃文斯的书中所展示的图像是,在DDD中,人们不局限于遵循特定的分层体系结构流,而是利用不同的层来保护域并使代码更干净。如果符合我们的要求,我们可以自由地直接访问应用程序的不同层,限制是我们将域关注点限制在域中以保护我们的模型

这张图片代表了正确的DDD方法

这张图片代表了正确的DDD方法

我认为这是一种可以接受的方法。2003年,当Evans写第一本书时,分层被认为是当时的最佳实践——一种关注点分离,如果你愿意的话

最近,这种趋势已经远离了层次。例如,请参见作者的本演示文稿

我如何向您证明这些层彼此紧密耦合

当业务部门要求他们在给定字段中添加另一列时,谁必须在代码库中触及多个层

重要的思想不是“层”,而是确保领域逻辑是一致组织的

例如,如果您的应用程序正在访问域模型以正确地更改底层数据,那就不太好了。如果应用程序正在访问域模型来读取底层数据——这可能不是什么大问题(请参阅)

当您查看洋葱架构或端口和适配器时,“分层”方法会变得更加混乱

我目前的看法是,对于通常将层重新移植到不同实现中的情况,干净层是经过优化的。我的经验是,这些案例并不特别常见;因此,与更容易扩展设计的方法相比,投资几率很低