工作,如果我有一個聚合對象如訂單 - >訂單行,其中我的訂單對象被確定爲總根,因而增加訂單行到我期望通過聚合根這樣做的秩序,並沒有其他的手段例如Order.AddOrderLine(OrderLine行)。與集合C#
訂單對象顯然暴露出OrderLines的集合,但我要如何避免使用此集合直接添加OrderLines消費者,我認爲答案是使用一個只讀集合?這是否會阻止消費者改變對象的狀態,即集合中的OrderLines?
感謝
工作,如果我有一個聚合對象如訂單 - >訂單行,其中我的訂單對象被確定爲總根,因而增加訂單行到我期望通過聚合根這樣做的秩序,並沒有其他的手段例如Order.AddOrderLine(OrderLine行)。與集合C#
訂單對象顯然暴露出OrderLines的集合,但我要如何避免使用此集合直接添加OrderLines消費者,我認爲答案是使用一個只讀集合?這是否會阻止消費者改變對象的狀態,即集合中的OrderLines?
感謝
標記與只讀關鍵字的集合只會繼續被重新分配了收集的參考,但不能阻止修改集合的內容。
您可以使用List(T).AsReadOnly方法返回一個ReadOnlyCollection情況下,雖然,這聽起來像你想要什麼。
如果你不想暴露你的訂單行對象,您應該想傳遞一個訂單行到您的訂單,例如另一種方式只提交元信息在一個單獨的類如下面我的例子:
/// <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
{
}
你可以發佈代碼? –
正在Readonly集合中不會阻止消費者更改其中的對象。 –
爲什麼你不希望人們直接添加訂單? –