领域模型保存

4

最近读完了Eric Evans的《领域驱动设计》(非常有启发性,非常有趣),但是在完成这本书后遇到了第一个重大项目的问题:如何处理领域模型的保存?

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

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

ParentClass.Save { ParentClassDB.Save ChildObject1.Save }

       ChildObject1DB.Save

ChildObject2.Save

       ChildObject2DB.Save  
  etc etc 

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

2个回答

6

在领域驱动设计(DDD)中,领域实体不负责自身的持久化。理想情况下,您不应该在其上拥有Save()方法。

您的存储库将具有这样的Save方法,它以实体实例作为参数:

public class PersonRepository
{
   //...

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

   //...
}

根据您的技术栈,ORM将处理对象保存,或者您将构建查询以保存人员,或者您将使用实例值填充存储过程参数等。

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


同意,但是PersonRepository.Save方法从哪里调用?直接从应用程序中调用吗?还是从域程序集中的“服务”类中调用,然后再从应用程序中调用? - Josh Noe

1
你使用聚合根吗?它们负责保存它们的实体。
如果有很多修改正在进行,一种方法是将该逻辑封装在领域服务中,并通过聚合根处理保存。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接