🐈
エンティティと集約の違いに関して自分の見解
IDDDの10章(集約)をもう一回読み直した上で現時点での知識を元に箇条書きで説明します。
- DDDでは集約単位での更新・永続化しか認められていない
- 1回の操作(ユースケース)では1つの集約のみ操作して良い、つまり複数の集約を1つのユースケースで操作してはならない。複数集約での更新が必要な時は集約の境界が間違っていないか一度見直した方が良い。
- 複数の集約にまたがる操作はドメインイベントを使うか、集約のマージ(再設計)などがある
- 集約(厳密には集約ルート)とエンティティは別概念(と自分は認識している)
- 集約間で関係性を持たせたい場合、つまりある集約が他の集約を参照したい場合は他集約の識別子のみを持たせる
- 集約は整合性を保ちたい単位で設計する
- 集約は識別子や、エンティティ、バリューオブジェクト(VO)、他集約の識別子(これもVO)などを持つオブジェクト
- エンティティは識別子を持つオブジェクト
- エンティティと集約の違いは
ドメインイベントを保持するかどうか
で、集約は発行されたドメインイベントをコレクションで保持する - 自分が混乱していたのはエンティティと集約を同じとみなしていたためで、エンティティも識別子のみ集約内に持たせていたが、エンティティはそれが集約でなければまるまるそのエンティティを集約に持たせて良い(という認識)
DDDで複数集約間の整合性を確保する方法(サンプルコードあり)[ドメイン駆動設計] - little hands' lab
Discussion