Aggregate Root
Aggregate Rootとは
Aggregate Rootは、Aggregate全体を代表し、外部からの操作を受け付ける唯一のEntityです。内部のEntityやValue Objectを調整し、Aggregate全体の不変条件を守ります。
Aggregate Rootにする基準は?
推奨
Aggregateの不変条件を守る唯一の入口となるEntityをAggregate Rootにする。
なぜ
外部からの変更経路を一つに絞ることで、内部の複数オブジェクトにまたがるルールを常に検証できます。
判断基準
- 外部からIDで参照される
- 内部Entityの生成・変更を調整する
- トランザクション整合性の境界になる
BAD
呼び出し側がorder.linesへ直接pushし、検証を迂回できる。
GOOD
Order.addLine()が重複商品や数量上限を検証してOrderLineを追加する。
図:AGGREGATEの変更経路
外部のユースケース
変更を依頼する
AGGREGATE BOUNDARY
Aggregate Root
不変条件を守る入口
Entity
同一性で追跡する
Value Object
値で等価性を決める