我讀過this interesting topic爲了研究DDD,並發現了一個新的想法,作者說「沒有在產品類別內製作'ProductReviews'集合的論點。因爲「有這兩個實體之間沒有真正不變」AggregateRoot應該包含其他AggregateRoot的集合嗎?
裏面有Product
類沒有ICollection<ProductReview>
。然後,問題是
- 它是否與DDD兼容?
- 這樣做的優點和缺點是什麼?
我讀過this interesting topic爲了研究DDD,並發現了一個新的想法,作者說「沒有在產品類別內製作'ProductReviews'集合的論點。因爲「有這兩個實體之間沒有真正不變」AggregateRoot應該包含其他AggregateRoot的集合嗎?
裏面有Product
類沒有ICollection<ProductReview>
。然後,問題是
它與DDD兼容嗎?
是的,將ProductReviews的邏輯集合中的元素分離爲產品聚合之外的聚合與DDD兼容。
也就是說,當通過這種方式分離事物時,通常不會試圖堅持事務級聯刪除,如鏈接的示例所示。
這樣做的優點和缺點是什麼?
通常有兩個優點
如果更改模型的兩個不同的部分並不需要同步 - 這是說,你永遠需要兩個部分一起換,以保持不變 - 然後將這些部分建模爲單獨的聚合體幫助明確分離(因此更容易推理等等)。
將模型分解爲單獨的聚合支持並行工作意味着我們可以減少進行更改所需的協調量。
如果模型的兩個不同部分彼此真正分離,則可以使用完全不同的技術來存儲它們。
另一方面,它的缺點是,當你後來發現你需要協調變化到兩個不同的聚合,畢竟事情變得混亂。那時你真正擁有的是數據模型中的單個「邏輯」聚合,它已被分解爲具有協調職責的域模型中的多個聚合。
從cqrs.nu
我知道聚集體事務的邊界,但我真的需要更新事務在同一事務中兩個聚集處理的。我應該怎麼做 ?
你應該重新考慮以下幾點:
- 你總邊界。
- 每個聚合的責任。
- 你可以在閱讀或傳奇中做些什麼。
- 您的域的實際非功能需求。
- 如果您編寫了一個解決方案,其中兩個或更多個集合被交易耦合,您還沒有理解集合。