集約(Aggregates)
文章がわかりずらいですね。。。何度読んでも・・・
簡単に言えば、データベース・トランザクションの範囲だが、データベースのみを基準にすると混乱するし、うまくいかない。モデルにも目がいかなくなってしまう。
実際、この種の問題に対するバランスの取れた解決策を見つけるのには、ドメインに対する深い理解が必要である。(第二部 第六章 より)
トランザクションの範囲の問題ではなく、モデルの境界を定義する。モデルから解決策を導くということですね。
- 集約とは関連するオブジェクトの集まり
- データを変更するための単位
- 各集約にはルートと境界がある
- ルートは集約に含まれている特定の1エンティティ
- 集約の外部のオブジェクトが参照を保持してよいのはルートだけ
- ルート以外のエンティティは集約の内部で一意であればいい
- ルートのエンティティはグローバルに一意でなければならない
このドメインでGoodsがドメインのルートとすると、外部のOrderはGoodsしか参照しません。
GoodsColorSizeは内部のEntityなので、そのなかだけで一意になればいいということですね。
明日も集約の続きを読みます。