2012-06-27 123 views
0

我仍然對ddd感到滿意,所以請原諒我,如果這沒有意義。 比方說,我有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調用優勢,可以更輕鬆地處理保存問題,但使其更難遍歷。現在我將Objects視爲Ag Roots或Entities,我發現它有助於Ag Roots的遍歷和自治在collection和instance之間建立雙向關係。

請幫助我瞭解使用哪種方式和/或如果我正確地看待事情。 謝謝, RAIF

回答

0

//應封裝我知道

因爲它可以變得相當混亂強制封裝,隨時給它。
依靠約定 - 請注意應該修改哪些內容以及在哪裏。

公共虛擬客戶ReadOnlyCustomer

是您的客戶談論只讀客戶?我打賭不是。

如果我要創建一個新的訂單。將訂單上的客戶設置並保存並使用nhibernate更新Customer.Orders集合或我應該將客戶訂單添加到Customer.Orders集合,然後保存客戶,是否有意義?

您不設定客戶訂單。您不會向客戶添加訂單。

客戶訂購產品。這反映了代碼的外觀如何:

class customer 
    method order(product) 
    orders.Add(new Order(product))