2011-07-28 69 views
-1

工作,如果我有一個聚合對象如訂單 - >訂單行,其中我的訂單對象被確定爲總根,因而增加訂單行到我期望通過聚合根這樣做的秩序,並沒有其他的手段例如Order.AddOrderLine(OrderLine行)。與集合C#

訂單對象顯然暴露出OrderLines的集合,但我要如何避免使用此集合直接添加OrderLines消費者,我認爲答案是使用一個只讀集合?這是否會阻止消費者改變對象的狀態,即集合中的OrderLines?

感謝

+0

你可以發佈代碼? –

+3

正在Readonly集合中不會阻止消費者更改其中的對象。 –

+0

爲什麼你不希望人們直接添加訂單? –

回答

5

暴露你的orderLines爲IEnumerable <訂單行>和實施添加/刪除必要的方法。這樣你的客戶只能在集合上進行迭代,而不是通過你的聚合來操縱它。

+0

現貨!非常感謝。 – David

0

如果你不想暴露你的訂單行對象,您應該想傳遞一個訂單行到您的訂單,例如另一種方式只提交元信息在一個單獨的類如下面我的例子:

/// <summary> 
/// Represents an order, order lines are not accessible by other classes 
/// </summary> 
public class Order 
{ 
    private readonly List<OrderLine> _orderLines = new List<OrderLine>(); 

    public void AddOrderLineFromProperties(OrderLineProperties properties) 
    { 
     _orderLines.Add(properties.CreateOrderLine()); 
    } 
} 

/// <summary> 
/// Class which contains orderline information, before it is 
/// "turned into a real orderline" 
/// </summary> 
public class OrderLineProperties 
{ 
    public OrderLine CreateOrderLine() 
    { 
     return new OrderLine(); 
    } 
} 

/// <summary> 
/// the concrete order line 
/// </summary> 
public class OrderLine 
{ 

}