我在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的角度来看,在这种情况下我该怎么做? 我应该通过参数来询问客户地址列表到服务操作吗?
答案 0 :(得分:1)
我知道级联更新在这方面不是一件好事 情形:
为什么?只要CustomerAddress
是一个简单的实体而不是聚合根,您就可以通过让EF将它们与Customer
一起保留来获得一切。
根据您的其他问题判断,我认为您可能会错过聚合根与实体的区别。这是你应该开始的地方 - 设计你的聚合,决定哪些对象应该是AR,简单的实体和价值对象。
从那里一切都应该根据一些简单的规则落实到位:每个AR一个存储库,实体只能引用来自同一聚合的实体,如果AR仅通过其ID引用另一个AR,它会更好,和VO可以从任何地方引用。
答案 1 :(得分:0)
如果您询问CustomerPhone,您可以中断(或不依赖)Customer对象的不变量。其中一种方法是使用Memento pattern。将客户的内部状态提取到Memento对象,并将此Memento传递到存储库。