存储库实施是否是基础设施的一部分?

Gus*_*dim 0 c# domain-driven-design ddd-repositories

在 DDD 项目中,我有这样的结构:

基础设施

  • MyProj.Library(包含辅助方法)
  • MyProj.Factory(包含 IoC 和 DI 的方法)
  • MyProj.Data(包含 IUserRepository 的实现)

领域

  • MyProj.Domain(包含域聚合和存储库接口,即 IUserRepository)

应用

  • MyProj.WebAPI

我需要知道MyProj.Data属于基础设施层还是域层。我真的很困惑实施的存储库属于哪里。

Mar*_*sen 5

通常,您将在基础设施层中拥有存储库实现,并在域层中拥有存储库接口。

作为一个例子,看看洋葱架构,它指出

内层定义接口。外层实现接口

洋葱架构

在洋葱架构的这个简单实现中,VisitorRepository 驻留在基础设施层并实现核心(域)层中的 IVisitorRepository。

  • 通过领域驱动设计:解决软件核心的复杂性中描述的分层架构,基础设施层位于底部。此外,领域层应该与其他层(例如 UI、应用程序、基础设施)隔离。 (2认同)
  • 当在分层架构上应用 DDD 时,存储库实现进入领域层,*而不是*基础设施层。如果您注意到较低层*不允许*(根据定义)依赖于较高层,那么原因应该是显而易见的。也就是说,基础设施不能依赖于领域。在这里,重要的是要理解“不依赖”意味着对较高层所做的更改(例如,我们添加/删除/修改实体)不得要求对较低层进行更改(我这么说只是为了避免与层之间引用的方法调用或类型混淆)。 (2认同)