我正在尝试学习域驱动设计的思想,并试图找出应该将数据库持久性代码放在哪里。

通过《 Vaughn Vernon的实现域驱动设计的实现》一书,我了解到存储库或数据库操作(以及连接等)必须保留在模型项目(域模型上下文)本身中。我的理解正确吗?

我指的是他的IdentityAccessContext,AgilePMContext等示例,其中存在到存储库的接口。我一直想拥有一个单独的数据层,然后在此处添加一个层使我陷入循环依赖。因为接口,实体是在模型中声明的,所以这是数据层所必需的,因此需要从模型中引用数据层以实现持久性。

这是正确的还是我错过了什么?

最佳答案

浏览《沃恩实现域驱动的设计》一书
  弗农”,我了解存储库或数据库操作
  (以及连接等)必须保留在Model项目中
  (域模型上下文)本身。我的理解正确吗?


存储库抽象(接口)应在“域”层中,但其具体实现在“基础结构”层中。

请参阅他的代码样本:https://github.com/VaughnVernon/IDDD_Samples/tree/master/iddd_agilepm/src/main/java/com/saasovation/agilepm,例如domain / model中的TeamRepository接口和port / adapter / persistence中的LevelDBTeamMemberRepository

没有循环引用,因为持久性与Domain紧密耦合,但是Domain仅在需要时才与持久性松散耦合(由于控制反转,大多数情况下是通过依赖注入实现的)。

关于c# - 数据访问层和DDD,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32123973/

10-11 22:58
查看更多