【しゅうやくルート】
集約ルート とは?
最終更新:
💡 注文と明細を、業務ルールを守って変更する窓口
ドメイン駆動設計(DDD)で、整合性を保つ単位である集約を代表するオブジェクト。集約内の変更の窓口となり、関連するオブジェクトの業務ルールを守る。
📌 このページのポイント
- 集約は、整合性を保ちながら一つの単位として扱うオブジェクト群
- 集約ルートが代表となり、内部を変更する操作を受け付ける
- 「取り消した注文には明細を追加しない」などのルールを守る
- 一覧表示などの読み取りは、別の問い合わせモデルで実装することもある
集約ルートって、何の代表なの?
集約という、整合性を保つためのオブジェクトのまとまりを代表するよ。たとえば注文とその注文明細を一つの集約にし、注文をルートにする設計があるんだ。
明細を追加するときはどうするの?
注文の「明細を追加する」という操作を呼ぶよ。注文が取り消し済みなら追加を断る、といった業務ルールをそこで確認できる。外から明細だけを勝手に変更すると、こうしたルールをすり抜けてしまうんだ。
関係するものは全部一つにまとめる?
そうではないよ。一緒に整合性を守る必要がある範囲を考える。たとえば注文が商品を参照していても、商品カタログ全体を同じ集約に入れる必要はない。集約は単なる関連データの寄せ集めではないんだ。
一覧を読むときも、必ず注文のオブジェクトを通る?
変更するモデルと読み取り用のモデルを分ける設計もあるよ。CQRSなどでは、一覧向けの問い合わせで複数の表を結合することもある。「外部からの参照はルートを通す」という集約の設計ルールを、すべての読み取り処理の禁止事項と混同しないようにしよう。
保存にはリポジトリが必要なの?
リポジトリを設けるなら、表ごとではなく集約ごとに扱う設計が基本だよ。ただし独自のリポジトリクラスが必須というわけではない。大切なのは、集約の変更を一つの整合性の単位として扱い、業務ルールを守ることなんだ。
まとめ:ざっくりこれだけ覚えればOK!
「集約ルート」って出てきたら「ひとまとまりのデータを、業務ルールを守って変更する代表窓口」と思えばだいたいOK!
📖 おまけ:英語の意味
「Aggregate Root」 = 集約の根(ルート)
💬 DDDの文脈で、複数の関連オブジェクトをひとかたまり(Aggregate)として扱う際の「代表者」がルートだよ