最近读完埃里克埃文斯领域驱动设计(非常有用,非常有乐趣)然而,自完成本书以来,第一个重大项目得到了如何处理领域模型保存的问题?
我很欣赏服务/存储库的使用以及它们如何帮助模型,但它们如何处理模型保存?
我之前的域模型保存将遵循以下方法调用结构;
ParentClass.Save {
ParentClassDB.Save
ChildObject1.Save
ChildObject1DB.Save
ChildObject2.Save
ChildObject2DB.Save etc etc
}
服务是否可以控制在子对象上调用适当的保存例程?
在DDD中,域实体不会处理其持久性.Save()
理想情况下,你不应该有一个方法.
您的存储库将具有这样的Save
方法,该方法在参数中采用实体实例:
public class PersonRepository { //... public void Save(Person person) { this.dataContext.Save(person); } //... }
根据您的堆栈,ORM将处理对象保存,或者您将通过构建查询来保存人员,或者您将使用实例值等填充存储过程参数.
如果我正确理解了您所做的事情,可能需要将您放置在域实体中的持久性逻辑移动到其他地方,可能是存储库或存储库使用的DAL.