Evans DDD书中有一幅图像,显示了访问不同应用程序层的UI。
根据史蒂夫·史密斯(Steve Smith)在其Pluralsight“ n层设计”课程中的描述:
“最终运行是指一个应用程序层调用不直接在其下面的另一层。这样的最终运行破坏了利用N层应用程序设计的优势,从而导致应用程序具有所有缺点和复杂性。 N层设计,无其优势。”
在同一个Pluralsight中,Smith在其“ DDD基础知识”课程中,使某些控制器直接访问存储库(在下文中),使控制器的行为就像某种应用程序服务,用于协调存储库访问和域对象。
我的问题是: Evans的书展示的图像是,在DDD中,不限于遵循特定的分层体系结构FLOW,而是利用不同的层来保护域并简化代码。如果适合我们的要求,我们可以自由地直接访问不同的应用程序层,限制是我们将Domain关注点限制在Domain中以保护我们的模型?
此图片代表正确的DDD方法吗?
答案 0 :(得分:1)
此图片代表正确的DDD方法吗?
我将其称为可接受方法。在2003年,埃文斯(Evans)撰写第一本ddd书时,分层被认为是当时的最佳实践-如果您愿意,可以将关注点分离。
最近,趋势已经远离分层。例如,请参见Udi Dahan的演示文稿。
我如何向您证明这些层之间是紧密相连的...?
谁–当企业来找他们并要求他们在给定字段中添加另一列时–谁不得不触摸他们的代码库中的多个层次?
重要的思想不是“层次”,而是确保域逻辑是紧密组织的。
例如,如果您的应用程序正在围绕域模型进行访问以正确地更改基础数据,那就不好了。如果应用程序正在使用领域模型来读取底层数据-可能没什么大不了的(请参见cqrs)。
当您研究洋葱架构或端口和适配器时,“分层”方法变得更加困惑。
我目前的看法是,针对通常将图层重新移植到不同实现中的情况,优化了干净图层。我的经验是,这些情况不是特别常见。因此,与使设计扩展更容易的方法相比,投资可能性很小。