我正在尝试学习域驱动设计的思想,并试图找出应该将数据库持久性代码放在哪里。
通过《 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/