簡體   English   中英

匯總根

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM