Aggregate
データを変更・永続化する最小単位となる
「良い集約の切り方」はドメイン知識がかなり必要そうmrsekut.icon
図で見るとわかりやすい
https://gyazo.com/b051ffa169a9c1ea2fa2cb35797304c1
集約は、1つ以上のEntityの集合のこと
これのみが集約の外部のEntityらとのやりとりをする
上図では、自動車集約のrootは自動車なので、
外部の顧客などは、タイヤなどにはアクセスできない
集約内の一部が変更されると、Root も変更される
e.g. タイヤの1つが変更されたら、自動車も新しく作られることになる
Root が削除されると、内部の Entity もすべて削除される
集約は 永続性の最小単位である
まとめて取得・まとめて更新 される
DBのtransactionでは、単一の集約を扱うべき
複数の集約を含んだり、境界を壊したりすべきでない
DB 操作は集約単位で行う
集約内部の Entity を直接 SQL 等で取得すべきでない
Root から関連を辿って取得する
集約内部の性質
内部 Entity 同士は自由に関連してよい
内部 Entity の Identity は 集約スコープ内で一意 であればよい
集約に含めるべきかどうかの判断
集約は小さく保ちたい
集約に含めないオブジェクトは、idなどの参照で関連すると良い
e.g. Order = {customerId: CustomerId, ... }
↓これやりだすとめちゃくちゃ複雑になる気がする
参考