在 DDD 中将存储库实现保存在哪里?

Posted

技术标签:

【中文标题】在 DDD 中将存储库实现保存在哪里?【英文标题】:Where to Keep the Repository implementations in DDD? 【发布时间】:2014-10-18 17:28:30 【问题描述】:

1) 根据域驱动设计,域层应该只有存储库接口,实现不应该是域层的一部分 - 如果我的理解有误,请指教?

2) 如果存储库实现不应该是域层的一部分,那么我应该将存储库实现保存在哪里(在基础架构中?)

3) 如果我想要这样的设计流程,以下目录结构是否可行:(我使用的是 DAO 而不是 ORM)

控制器 域服务 RepositoryImpl DAOImpl

Directory structure

+ Infrastructure
      +--- Logging
      +--- Caching

+ Applicaton
      +---- Service1Controller

+ DomainLayer
      +---- Service1Impl
      +---- Service2Impl

+ DataAccessLayer
      +----Repositories
               +----------Service1Repositories
               +----------Service2Repositories
      +----DAO
               +----------Service1DAO
               +----------Service2DAO

4) 存储库可以是数据访问层的一部分吗?

5) DDD 是架构还是设计?如果是架构,那么DDD和洋葱架构有什么区别?

【问题讨论】:

【参考方案1】:

    截至声明:

    A.高级模块不应该依赖于低级模块。两者都应该依赖于抽象。

    B.抽象不应依赖于细节。细节应该取决于抽象。

    你的理解没问题。您将域层与接口而不是实现耦合。

    是的,基础设施是最适合它的地方。

    应该没问题。

    存储库的实现,是的。

    领域驱动设计不是一种技术或方法。 DDD 提供了一种实践结构和术语,用于制定设计决策,重点关注和加速处理复杂领域的软件项目。建筑是完全不同的东西。您可以将任何架构与 DDD 结合使用。

【讨论】:

以上是关于在 DDD 中将存储库实现保存在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

在 DDD 中将全局规则验证放在哪里

DDD:在哪里放置域服务的实现

DDD:在存储库上删除与在实体上删除?

聚合根中覆盖的实体如何保存在 DDD 中?

DDD 基础设施服务

我在哪里可以找到一些 DDD 的好例子? [关闭]