我收到了一个关于DDD分层架构中依赖性的问题。如果Repository的实现在基础设施层中,那么这意味着基础设施层依赖于领域层,因为在Repository实现中将引用实体。
另一方面,如果在领域中使用基础设施服务,领域层可以引用基础设施层。
这样不会创建循环引用吗?
我收到了一个关于DDD分层架构中依赖性的问题。如果Repository的实现在基础设施层中,那么这意味着基础设施层依赖于领域层,因为在Repository实现中将引用实体。
另一方面,如果在领域中使用基础设施服务,领域层可以引用基础设施层。
这样不会创建循环引用吗?
看看洋葱架构,它展示了一个好的DDD解决方案设置。(查看下面的评论 - 如果可以,请改用垂直切片 - 在使用几年后,洋葱的成本似乎不合理)
基本上,所有领域模型和领域服务接口都被视为核心。层只依赖于更接近核心的上层。它们的实际实现由基础设施处理。
领域项目不应引用基础结构项目。如果领域需要使用某些东西,则应在领域内定义为接口,并在基础结构项目中实现。
最终你的接口定义了你的应用程序。如何实现它的逻辑是外部化的。因此,我期望你有包含领域模型和领域服务的程序集,一个前端(例如MVC等),然后是一个基础架构程序集,该程序集实现提供数据等的NHibernate等内容。
您可以在链接文章的各个部分中看到实现体系结构的各种示例。最简单的一个示例在这里。
您可以在这里看到与它相关的问题。
主要的好处是大多数情况下都会更改基础设施问题。新的数据层技术,新的文件存储等。此外,您的核心领域应该是相当稳定的,因为它没有实现任何东西,只是通过契约(接口)定义了它所需要的东西。将实现关注点放在一个位置上,您可以将跨程序集所需的变更量最小化。
是的,在你的情况下是这样的。我也有同样的问题 :)
以下是我的解释:
在Eric Evans的架构图中,基础设施层似乎是一个特殊的层。它实现了接口、应用和领域。