集約(Aggregate)
集約で大切な考え方として以下の点が挙げられると考えています。
集約内部の変更は必ず集約ルートを経由することで集約内を常に整合性が確保された状態にする。
集約ルートの単位でデータの取得・永続化を行う。
もし集約ルート以外の変更を許可してしまうと、整合性を確保するための処理が利用側に委ねられてしまい、整合性が崩された状態で永続化されてしまう恐れがあります。集約ルート以外のドメインオブジェクト単体での永続化を許可してしまった場合も同様です。
集約パターンがわかりにくいのは、本来はドメインロジックの複雑さを整理しクラスの組み合わせで表現する設計パターンである集約を、永続化やデータ整合性という別の関心事とからめて説明しているためです。
集約を理解するには、まず、集約を永続化の関心事から切り離して考えたほうがわかりやすくなります。