【しゅうやくルート】
集約ルート とは?
💡 チームの窓口係。ここを通らないと中に入れない
📌 このページのポイント
集約ルートって、なんか難しそうな名前なの?
名前は難しそうだけど、概念はシンプルだよ。たとえば「注文」と「注文明細」を考えてみよう。明細だけが単独でふらふらしても意味がないよね?
たしかに、注文がなければ明細もないよね!
そう!だから「注文」が集約ルートになって、明細は必ず注文を通じて追加・変更するルールにするんだ。「注文.明細を追加する()」みたいにね
直接明細をいじれないの?ちょっと不便じゃないの?
一見不便に見えるけど、これで整合性が守れるんだよ。たとえば「注文がキャンセル済みのときは明細を変えられない」というルールも、ルートで一括チェックできるんだ
なるほど!ルールの番人みたいな役割なんだね!
まさにそう。さらに他の集約(例えば「商品」)への参照はIDだけにするのが鉄則だよ。オブジェクトを直接持ち回すとどこからでも変更できてしまうからね
IDだけで参照するの?データを取り出すときはどうするの?
それはリポジトリパターンの出番だよ。IDを渡して必要なときに取得する。集約ルートはデータの取得ではなく、変更時の整合性を守るために存在するんだ
まとめ:ざっくりこれだけ覚えればOK!
「集約ルート」って出てきたら「関連オブジェクトをまとめる代表窓口」と思えればだいたいOK!
📖 おまけ:英語の意味
「Aggregate Root」 = 集約の根(ルート)
💬 DDDの文脈で、複数の関連オブジェクトをひとかたまり(Aggregate)として扱う際の「代表者」がルートだよ