🎯 什麼情境該想到我
當一群關係緊密的物件必須「一起保持一致」(例如訂單與它的訂單明細、庫存與其批次),而你不確定該把一致性與交易的邊界畫在哪、對外又該從哪個物件進去操作時。
⚙️ 怎麼用(步驟 / 公式)
意圖:把一組實體與值物件框成一個一致性邊界,對外只透過聚合根存取。
- 找出天然要一起維持不變式的實體與值物件,圈成一個聚合。
- 指定其中一個實體為聚合根:它是唯一對外入口,外部只能持有並操作聚合根。
- 一次交易只保證單一聚合內的一致性——聚合內同步強一致。
- 跨聚合的關係用 ID 參照,不直接持有對方物件;跨聚合一致性走最終一致(如領域事件)。
- 讓聚合盡量小:邊界越小,並發衝突與交易範圍越可控。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 聚合太大會造成交易鎖範圍過廣、並發衝突多、載入成本高。
- 想在一次交易改多個聚合通常是邊界畫錯的訊號——改用事件做最終一致。
- 外部繞過聚合根直接動內部物件,會讓不變式失守。