DDD
ドメイン駆動設計

ちょっとずつ読むドメイン駆動設計 第ニ部 モデル駆動設計の構成要素 第六章 ドメインオブジェクトのライフサイクル2(集約)

More than 1 year has passed since last update.

集約(Aggregates)

文章がわかりずらいですね。。。何度読んでも・・・

簡単に言えば、データベース・トランザクションの範囲だが、データベースのみを基準にすると混乱するし、うまくいかない。モデルにも目がいかなくなってしまう。

実際、この種の問題に対するバランスの取れた解決策を見つけるのには、ドメインに対する深い理解が必要である。(第二部 第六章 より)

トランザクションの範囲の問題ではなく、モデルの境界を定義する。モデルから解決策を導くということですね。

  • 集約とは関連するオブジェクトの集まり
  • データを変更するための単位
  • 各集約にはルートと境界がある
  • ルートは集約に含まれている特定の1エンティティ
  • 集約の外部のオブジェクトが参照を保持してよいのはルートだけ
  • ルート以外のエンティティは集約の内部で一意であればいい
  • ルートのエンティティはグローバルに一意でなければならない

クラス図3.png

このドメインでGoodsがドメインのルートとすると、外部のOrderはGoodsしか参照しません。
GoodsColorSizeは内部のEntityなので、そのなかだけで一意になればいいということですね。

明日も集約の続きを読みます。