3
如果我设计了一个像下面这样的AR,你认为我应该去说更新一个订单行对象中的一个属性吗?对一个聚合根内的实体的操作
对于实施例如何可以改变标题为我的订单线中的一个(例如问题)
这是高阶聚集体根
public class Order
{
private readonly int id;
private readonly Customer customer; // Customer is another Aggregate
private readonly IList<OrderLine> orderLines;
private readonly IOrderLineFactory orderLineFactory;
public Order(int id, Customer customer, IOrderLineFactory orderLineFactory)
{
this.id = id;
this.customer = customer;
this.orderLines = new List<OrderLine>();
this.orderLineFactory = orderLineFactory;
}
public void AddOrderLine(Item item, int quantity)
{
OrderLine orderLine = orderLineFactory.Create(this, item, quantity);
orderLines.Add(orderLine);
}
}
这种方法会不会导致AR暴露的接口膨胀?它需要通过自己的接口来暴露所有实体的行为。另外假设该订单行有一组需要更新的标签。我们会像order.changeTagTitle(orderLineId,tagId,“New title”); ? – Sudarshan 2012-07-31 02:10:33
@Sudarshan:是的,它会膨胀界面。但大多数情况下,总量相对较小,并且总量上不相关的方法数量不会很大。这是DDD的一个缺点。 – Jeroen 2012-07-31 09:58:59
如何设计优雅的聚合根接口?因为如果一个AR甚至只有2个实体,并且每个实体都需要暴露2个行为,则每个AR将有4个行为来暴露,而不是它自己的行为 – Sudarshan 2012-08-15 14:12:53