在DDD中保存相关实体

时间:2015-03-07 20:11:41

标签: c# entity-framework repository domain-driven-design

我在ICustomerService中执行了以下服务操作:

public void RegisterCustomer(Customer customer)
{
    Check.NotNull(customer, "customer");

    //do another domain specific things...

    customerRepository.Save(customer);
}

修改

Customer class引用了ICollection<> CustomerAddress实体。
此操作也必须保存客户地址列表。

我知道在这种情况下,级联更新不是一件好事:

How should I handle persistence for referenced entities?

从DDD的角度来看,在这种情况下我该怎么做? 我应该通过参数来询问客户地址列表到服务操作吗?

2 个答案:

答案 0 :(得分:1)

  

我知道级联更新在这方面不是一件好事   情形:

为什么?只要CustomerAddress是一个简单的实体而不是聚合根,您就可以通过让EF将它们与Customer一起保留来获得一切。

根据您的其他问题判断,我认为您可能会错过聚合根与实体的区别。这是你应该开始的地方 - 设计你的聚合,决定哪些对象应该是AR,简单的实体和价值对象。

从那里一切都应该根据一些简单的规则落实到位:每个AR一个存储库,实体只能引用来自同一聚合的实体,如果AR仅通过其ID引用另一个AR,它会更好,和VO可以从任何地方引用。

答案 1 :(得分:0)

如果您询问CustomerPhone,您可以中断(或不依赖)Customer对象的不变量。其中一种方法是使用Memento pattern。将客户的内部状态提取到Memento对象,并将此Memento传递到存储库。