generated at
Entityの正規化の基準はAggregateを意識する


例えば、OrderとCustomerの2つのEntityの関係性を考える
正規化するかどうかで、2通りの定義を考えられる
正規化しない.ts
type Order = { id: OrderId customer: Customer items: OrderItem[] }
正規化する.ts
type Order = { id: OrderId customerId: CustomerId // idのみを知っている items: OrderItem[] }
望ましい設計はどちらか?

Aggregateを意識する
Order Customer が同一のAggregateであるなら、前者
そうでないなら、後者
抑えるべきは、
Entityはimmutableである
Aggregateは、最小の更新単位である
Aggregateは、最小の永続単位である
上記の例で言えば、以下のようなことを考えれて判断すれば良い
Customer が更新されたときに、 Order も更新する必要があるのか?
受注とは全然別の文脈で Customer が更新されたときも、いちいち Order も更新するのか?
Order をfetchする時に、 Customer もfetchする必要があるのか?
同一のAggregateと見なすと、結合がかなり強くなる
上記の例で言えば、 Order OrderItem は同じAggregateであることが望ましいが、
Order Customer に関しては、そうではなさそうである
これは扱うドメインに大きく依存する




参考