【しゅうやくルート】

集約ルート とは?

💡 チームの窓口係。ここを通らないと中に入れない
📌 このページのポイント
集約ルートのアクセス制御 外部サービス 集約の境界 集約ルート (Order) 子オブジェクト 子オブジェクト 子オブジェクト OK 直接アクセス NG
集約ルートを通じてのみ内部の子オブジェクトにアクセスできる
ひよこ ひよこ

集約ルートって、なんか難しそうな名前なの?

ペンギン先生 ペンギン先生

名前は難しそうだけど、概念はシンプルだよ。たとえば「注文」と「注文明細」を考えてみよう。明細だけが単独でふらふらしても意味がないよね?

ひよこ ひよこ

たしかに、注文がなければ明細もないよね!

ペンギン先生 ペンギン先生

そう!だから「注文」が集約ルートになって、明細は必ず注文を通じて追加・変更するルールにするんだ。「注文.明細を追加する()」みたいにね

ひよこ ひよこ

直接明細をいじれないの?ちょっと不便じゃないの?

ペンギン先生 ペンギン先生

一見不便に見えるけど、これで整合性が守れるんだよ。たとえば「注文がキャンセル済みのときは明細を変えられない」というルールも、ルートで一括チェックできるんだ

ひよこ ひよこ

なるほど!ルールの番人みたいな役割なんだね!

ペンギン先生 ペンギン先生

まさにそう。さらに他の集約(例えば「商品」)への参照はIDだけにするのが鉄則だよ。オブジェクトを直接持ち回すとどこからでも変更できてしまうからね

ひよこ ひよこ

IDだけで参照するの?データを取り出すときはどうするの?

ペンギン先生 ペンギン先生

それはリポジトリパターンの出番だよ。IDを渡して必要なときに取得する。集約ルートはデータの取得ではなく、変更時の整合性を守るために存在するんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「集約ルート」って出てきたら「関連オブジェクトをまとめる代表窓口」と思えればだいたいOK!
📖 おまけ:英語の意味
「Aggregate Root」 = 集約の根(ルート)
💬 DDDの文脈で、複数の関連オブジェクトをひとかたまり(Aggregate)として扱う際の「代表者」がルートだよ
← 用語集にもどる