0

我仍然对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 的遍历和自治,从而在集合和实例之间建立双向关系。

请帮助我了解使用哪种方式和/或我是否正确看待事物。谢谢, 雷夫

4

1 回答 1

0

// 应该封装我知道

由于强制封装可能会变得非常混乱,因此请随意放弃它。
依赖约定——注意应该修改什么以及在哪里修改。

公共虚拟客户 ReadOnlyCustomer

您的客户是否在谈论只读客户?我打赌不会。

如果我要创建一个新订单。将客户设置在订单上并保存并让 nhibernate 更新 Customer.Orders 集合是否有意义,或者我应该将带有客户集的订单添加到 Customer.Orders 集合然后保存客户。

您没有将客户设置为订单。您不会向客户添加订单。

客户订购产品。这反映了代码中的样子:

class customer
  method order(product)
    orders.Add(new Order(product))
于 2012-06-29T11:10:35.850 回答