Aggregate内部の変更
Aggregate内部の変更とは
Aggregate内部の変更とは、Aggregate Rootが公開する操作を通して、内部のEntityやValue Objectの状態を更新することです。外部から内部状態を直接書き換えず、Rootが全体のルールを確認します。
Aggregateの外から内部Entityを変更していい?
推奨
内部Entityの変更はAggregate Rootが公開する意図のある操作を経由する。
なぜ
内部Entityだけを見て変更すると、Aggregate全体で守るべき不変条件が破られる可能性があります。
判断基準
- setterではなく業務上の操作名を使う
- 変更前にAggregate全体の条件を検証する
- 内部コレクションを可変で公開しない
BAD
order.getLines()[0].quantity = 100 のように内部状態を直接書き換える。
GOOD
order.changeQuantity(lineId, quantity)で対象行と注文上限を同時に検証する。
図:AGGREGATEの変更経路
外部のユースケース
変更を依頼する
AGGREGATE BOUNDARY
Aggregate Root
不変条件を守る入口
Entity
同一性で追跡する
Value Object
値で等価性を決める