【发布时间】:2012-06-27 14:02:00
【问题描述】:
我仍然对 ddd 感到困惑,如果这没有意义,请原谅我。 假设我有
public class Customer{
public IList<Order> Orders{get;set;} // should be encapsulated i know
}
public class Order{
private Customer _readOnlyCustomer;
public virtual Customer ReadOnlyCustomer { get { return _readOnlyCustomer; } }
// possibly
public virtual void SetCustomer(Customer customer) {_readOnlyCustomer = customer}
}
首先我做的是私有的 readonlyCustomer 业务,因为我的理解是一个聚合根不应该修改另一个聚合根,虽然我不能直接强制执行此操作来解决 fluentnhibernate 映射问题,但我至少可以这样命名以警告它不可修改。我什至可以在映射中将字段设为只读,这实际上会强制执行此操作,尽管考虑到我的下一个问题,这可能是一个问题,而且我不确定如何在客户方面强制执行此操作,因为我可以从customer.orders 收集并修改它。任何关于这个问题的想法都将受到欢迎。但我真正的问题是。
如果我要创建一个新订单。将客户设置在订单上并保存并让 nhibernate 更新 Customer.Orders 集合是否有意义,或者我应该将带有客户集的订单添加到 Customer.Orders 集合然后保存客户。
当我写这篇文章时,我意识到,我以前这样做的方式是不让子代中引用父代,而只是更新父代上的集合。我认为这在 NH 中具有 db 调用优势,可以更轻松地处理保存,但更难遍历。现在我将对象视为 Ag Roots 或 Entities,我发现它有助于 Ag Roots 的遍历和自治,从而在集合和实例之间建立双向关系。
请帮助我了解使用哪种方式和/或我是否正确看待事物。 谢谢, 雷夫
【问题讨论】:
标签: mapping domain-driven-design relationship updates