Itz*_*ban 1 .net c# design-patterns domain-driven-design
请考虑以下结构:Customer-> Orders-> OrderLines-> Quantity和Customer是聚合根.
假设我们想要更改一个OrderLine的数量,我们将如何做?客户会有这样的方法:
public ChangeQuantity(Order order, OrderLine orderLine, int quantity)
{
order.OrderLines.First(...).Quantity = quantity;
}
Run Code Online (Sandbox Code Playgroud)
或者实施是:
public ChangeQuantity(Order order, OrderLine orderLine, int quantity)
{
order.ChangeQuantity(orderLine, quantity);
}
Run Code Online (Sandbox Code Playgroud)
您不需要对非根对象的所有访问权限都可以通过根对象.
您只需要将根对象作为一致性和持久性边界.
因此,没有理由拥有任何一种方法,因为您的用户可以直接转到订单行对象:
OrderLine.Quantity = 5;
Run Code Online (Sandbox Code Playgroud)
客户是聚合根的事实只是意味着没有办法,例如,在不将整个客户提交到数据库的情况下将此更改提交到数据库.