【しゅうやくルート】

集約ルート とは?

最終更新:
💡 注文と明細を、業務ルールを守って変更する窓口

ドメイン駆動設計(DDD)で、整合性を保つ単位である集約を代表するオブジェクト。集約内の変更の窓口となり、関連するオブジェクトの業務ルールを守る。

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

参考資料

← 用語集にもどる