gpt4 book ai didi

c# - DDD 基础设施服务

转载 作者:可可西里 更新时间:2023-11-01 02:59:36 26 4
gpt4 key购买 nike

我正在学习 DDD,但我对基础设施层有点迷茫。

据我所知,“所有优秀的 DDD 应用程序”都应该有 4 层:Presentation、Application、Domain 和 Infrastructure。应使用存储库访问数据库。存储库接口(interface)应该在域层和存储库实现中 - 在基础设施中(引用 DDD: Where to keep domain Interfaces, the Infrastructure?)。

应用程序、域和基础架构层应该/可能有服务(引用 Services in Domain-Driven Design ),例如,基础架构层中发送电子邮件的 EmailService。

但是,在基础设施层内部,我们有存储库实现,用于访问数据库。那么,在这种情况下,存储库是数据库服务吗?基础架构服务和存储库有什么区别?

提前致谢!

最佳答案

坚持 DDD 定义,存储库不同于服务。存储库直接关联到实体,通常是聚合根。服务定义的行为并不真正属于您域中的单个实体。您绝对可以在每一层中找到服务,尽管它们解决的问题类型因层而异,并且可能与 DDD 的概念服务不同。

在概念层面上工作时,DDD 存储库与 DDD 服务的不同之处在于它专门与实体持久性相关联。服务可以解决您可能遇到的任何域、应用程序或基础架构问题。

您到处都会遇到与 DDD 的术语冲突。例如,DDD 存储库与 Repository pattern 不同。在 Martin Fowler 的 PoEAA 书中找到,尽管它可能采用这样的模式。这通常是许多人困惑的根源。

如果您始终将域模型放在您所做的一切的中心,那么它有助于 DDD。当谈到分层 DDD 应用程序时,我经常选择 Jeffrey Palermo's Onion Architecture .看看这个。下载 CodeCampServer ,一个使用此架构的示例应用程序。我认为它非常适合 DDD 编程。

祝你好运!

关于c# - DDD 基础设施服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1383999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com