簡體   English   中英

聚合是否可以擁有另一個聚合的精簡版僅供讀取?

[英]Can an aggregate have lite version of another aggregate just for read?

我有一個以 Order 為根的訂單聚合,具有多個 OrderLine。 OrderLine 具有對 Product 聚合的“標識引用”。 但只有“身份參考”是不夠的。 我需要“應稅”屬性的值,最后一個“價格”屬性用於計算 OrderLine 中的價格。 事實上,為了在 OrderLine 中計算價格,需要一些來自 Product 聚合的數據。 如何在 DDD 中解決這個問題? 在 DDD 方法中,將精簡版產品 (ProductLite) 用作只讀 DTO 是否有效?

- 更新(感謝@Francesc Castells)

// app service to add OrderLine  
product = productRepo.Read(productId)  
orderItemPrice = priceDomainService.CalculatePrice(product.price, product.tax)  
order.AddOrderLine(product.ID, orderItemPrice)  
orderRepo.Save(order)  

在此處輸入圖像描述

是的,這是完全正確的。 聚合應存儲實現其目的所需的所有數據。 此數據不必始終是用戶輸入,它也可以來自其他聚合。 聚合生成的數據和聚合使用的數據之間顯然存在差異。 例如,您的訂單消費了產品價格,但它無法更改產品價格並期望系統的 rest 尊重新價格,因為它不擁有它。

在您的場景中,我會說一旦在 OrderLine 中,價格就不再是產品的一部分,而是 OrderLine 本身的一部分,這可能被定義為產品訂購時的價格,或者可能是訂購時的價格它被放入購物車。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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