6/27 ドメイン駆動設計 集約 [復習]
集約とは
ドメイン駆動設計において、一つ以上のエンティティを束ね、単一のトランザクションの枠内で整合性を保つための仕組みです。 例えば、銀行口座とそれに紐づく取引履歴エンティティがある場合、これらを銀行口座集約として束ね、取引が行われた場合には必ず銀行口座集約単位で整合性を保つようにします。
なぜ使うか
オブジェクトのグループの不変条件(ある処理の間、その真偽値が真のまま変化しない述語のこと)を維持するために秩序を作るため
どのように使うか
集約ルート作る
外部からのアクセスはすべて集約ルートを経由して行う
例: Userという集約があった場合、Userという集約ルートがあり、UserName UserIdが存在するとする。この場合、外部からUserName UserIdを操作してはならず、集約ルートであるUserを経由する必要がある
const userName = new UserName('newName'); //NG user.name = userName; //OK user.changeName(userName);
- UserにはchangeNameメソッドがあるという前提
- UserNameに直接アクセスして代入するのは禁止
- 集約ルートであるUserを経由(changeNameメソッドを使用)するやり方をしなくてはならない、不変条件を維持する秩序をもたらすため