集約とは
・リポジトリに入出力する単位
・エヴァンス本の中でも、エンティティや値オブジェクトなどと同列の位置付け
前提
-
オブジェクト指向プログラミングでは複数のオブジェクトがまとめられ、一つの意味を持ったオブジェクトが構築される。
-
こうしたオブジェクトのグループには維持されるべき不変条件が存在する。不変条件は常に維持されることが求められるが、オブジェクトのデータを変更しようとする操作を無制限に受け入れてしまうと難しくなる。そのためオブジェクトの操作には秩序が必要。
-
集約は不変条件を維持する単位として切り出され、オブジェクトの操作に秩序をもたらす
-
集約には境界とルートが存在する
・境界:集約に何が含まれるのかを定義するための境界。
・ルート:集約に含まれる特定のオブジェクト。外部からの集約に存在するオブジェクトを外部に曝け出さないことで、集約内の普遍条件を維持できるようにしている。
ルール
- 集約の外部から境界の内部のオブジェクトを操作してはいけない
- 集約を操作するための直接のインターフェースとなるオブジェクトは集約ルート(AR:Aggregate Root)と呼ばれるオブジェクトに限定される