工作,如果我有一个聚合对象如订单 - >订单行,其中我的订单对象被确定为总根,因而增加订单行到我期望通过聚合根这样做的秩序,并没有其他的手段例如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集合中不会阻止消费者更改其中的对象。 –
为什么你不希望人们直接添加订单? –