我仍然围绕着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的遍历和自治在集合和实例之间建立双向关系。
请帮助我了解使用哪种方式和/或我是否正确查看。 谢谢, RAIF
答案 0 :(得分:0)
//应该封装我知道
由于强制封装可能会非常混乱,因此请随意删除它 依赖惯例 - 要知道应该修改什么以及在哪里。
public virtual Customer ReadOnlyCustomer
您的客户是否在谈论只读客户?我没打赌。
如果我要创建新订单。将订单上的客户设置并保存并让nhibernate更新Customer.Orders集合或者我应该将客户设置的订单添加到Customer.Orders集合,然后保存客户是否有意义。
您没有将客户设置为订单。您不向客户添加订单。
客户订购产品。这反映了代码中的样子:
class customer
method order(product)
orders.Add(new Order(product))