給定一個訂單集合,它由Order和OrderItems組成。訂單是聚合根。放置訂單是唯一需要事務才能保證數據一致性的場景。或者至少有很多場景涉及改變數據的順序和orderItems,不需要交易。爲什麼聚合中的每個數據更改應該處於事務中?
在DDD之前,交易是在創建方法期間做出的決定。您通常會認爲此方法或行爲是否需要在事務中以保持一致性。
DDD建議爲聚合根暴露的每種可能行爲進行事務處理。這實際上可能導致更多的死鎖。
我想我不必在聚合根中實現每個數據更改行爲在事務中。
例如,如果您僅更改送貨詳細信息,爲什麼還需要交易。如果你只是刪除一個訂單項目,爲什麼你需要一個交易。所以對於Order.UpdateOrder和Order.DeleteOrderItem方法,我們不應該考慮事務。
我想念什麼?
對於死鎖的可能性檢查這個職位。 https://stackoverflow.com/questions/34662578/in-domain-driven-design-why-would-you-use-an-aggregate-object-and-what-key-pr – Costa
我說並非所有的行爲在根集合中需要在事務中。 我認爲在一致性問題是可能的時候我們應該考慮交易,並且應該基於分析行爲。 例如,如果您僅更改送貨細節,爲什麼您需要一個交易。如果您只刪除訂單商品,爲什麼需要交易。所以在Order.UpdateOrder和Order.DeleteOrderItem方法中,我們不應該考慮事務。 – Costa
@Costa但是在這些情況下你需要事務處理,否則根據你的存儲庫實現它可能會變得混亂。請記住,聚合在處理命令之前/之前完全加載,應該沒有延遲加載。 –