【问题标题】:Domain Model Saving领域模型保存
【发布时间】:2009-03-25 11:05:23
【问题描述】:

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

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

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

父类.保存 {

ParentClassDB.Save

ChildObject1.Save

       ChildObject1DB.Save

ChildObject2.Save

       ChildObject2DB.Save  
  etc etc 

}

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

【问题讨论】:

    标签: domain-driven-design domain-model


    【解决方案1】:

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

    您的存储库将有这样一个Save 方法,它在参数中接受一个实体实例:

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

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

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

    【讨论】:

    • 同意,但是 PersonRepository.Save 方法是从哪里调用的呢?直接从应用程序?从域程序集中的“服务”类中,然后从应用程序中调用?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-20
      • 2014-01-05
      • 2012-09-04
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多