4

最近读完了 Eric Evans Domain Driven Design(内容丰富,非常有趣),但是在完成本书后来到第一个重大项目,并遇到了如何处理域模型保存的问题?

我很欣赏服务/存储库的使用以及它们如何帮助模型,但他们将如何处理模型保存?

我以前的域模型保存将遵循以下方法调用结构;

父类.保存 {

ParentClassDB.保存

ChildObject1.Save

       ChildObject1DB.Save

ChildObject2.Save

       ChildObject2DB.Save  
  etc etc 

}

服务是否控制对子对象调用适当的保存例程?

4

2 回答 2

6

在 DDD 中,域实体不关心其持久性。理想情况下,你不应该有一个Save()方法。

您的存储库将具有这样的Save方法,该方法在参数中采用实体实例:

public class PersonRepository
{
   //...

   public void Save(Person person)
   {
      this.dataContext.Save(person);
   }

   //...
}

根据您的堆栈,ORM 将处理对象保存,或者您将通过构造一个查询来保存人员,或者您将使用您的实例值等填充存储过程参数。

如果我正确理解了您所做的事情,则可能有必要将您放在域实体中的持久性逻辑移到其他地方,可能在存储库中,或者在存储库使用的 DAL 中。

于 2009-03-25T11:21:21.593 回答
1

你使用聚合根吗?他们有责任拯救他们的实体。

如果有很多修改正在进行,一种方法可能是将逻辑封装在域服务中,并让服务通过聚合根处理保存。

于 2009-03-25T11:19:31.347 回答