[英]Aggregate Roots
考慮以下結構:Customer-> Orders-> OrderLines-> Quantity,並且Customer是聚合根。
假設我們要更改一個訂單行的數量,我們該怎么做? 客戶是否可以使用以下方法:
public ChangeQuantity(Order order, OrderLine orderLine, int quantity)
{
order.OrderLines.First(...).Quantity = quantity;
}
或將實現為:
public ChangeQuantity(Order order, OrderLine orderLine, int quantity)
{
order.ChangeQuantity(orderLine, quantity);
}
絕對是后者。 如果您考慮一下,第一種方法違反了Demeter法則 -這實際上是DDD的核心屬性。
但是,如果您已經傳遞了訂單和訂單行,為什么調用者不執行方法調用?
您不需要對非根對象的所有訪問就可以通過根對象。
您只需要使根對象成為一致性和持久性邊界即可。
因此,沒有理由使用這兩種方法,因為您的用戶可以直接轉到訂單行對象:
OrderLine.Quantity = 5;
客戶是聚合根這一事實意味着,例如,如果沒有將整個客戶都提交給數據庫,則無法將更改提交給數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.