最近读完埃里克埃文斯领域驱动设计(内容非常丰富,非常有乐趣)然而,自完成本书后出现了第一个重大项目并得到了如何处理域模型保存的问题?
我很欣赏服务/存储库的使用以及它们如何帮助模型但是它们如何处理模型保存?
我之前的域模型保存将遵循以下方法调用结构;
ParentClass.Save {
ParentClassDB.Save
ChildObject1.Save
ChildObject1DB.Save
ChildObject2.Save
ChildObject2DB.Save
etc etc
}
服务是否可以控制在子对象上调用适当的保存例程?
答案 0 :(得分:6)
在DDD中,域实体不会处理其持久性。理想情况下,您不应该使用Save()
方法。
您的存储库将具有这样的Save
方法,该方法在参数:
public class PersonRepository
{
//...
public void Save(Person person)
{
this.dataContext.Save(person);
}
//...
}
根据您的堆栈,ORM将处理对象保存,或者您将通过构建查询来保存此人,或者您将使用实例值等填充存储过程参数。
如果我理解你做了什么,可能有必要将你放在域实体中的持久性逻辑移动到其他地方,可能是存储库,或存储库使用的DAL。
答案 1 :(得分:1)
您使用聚合根吗?他们负责保存他们的实体。
如果在一种方式上进行大量修改,可以将该逻辑封装在域服务中,并让服务通过聚合根处理保存。