現在、システム内のエンティティ、値オブジェクト、および集計を決定しています。次のエンティティが特定されたとします。
顧客、CustomerEmail、電子メール、CustomerAddress、住所、AddressType
ここで、Customers -> Emails は多対多の関係であり、Customers -> Addresses (アドレス タイプを使用) と同様です。これらの関係は、CustomerAddress および CustomerEmail 関係オブジェクトによって表されます。
最初は、これは簡単だと思いました:
エンティティ: Customer、CustomerEmail、CustomerAddress 値オブジェクト: Email、Address、AddressType
Customer は、上記のすべてのエンティティと VO を含む集約の集約ルートです。
私が抱えている問題 (そして、これは、先に進むにつれて集計の概念について学習しているだけかもしれません) 同じ Address および Email 値オブジェクトを使用して、上記の Customer 集計を反映する Supplier エンティティがあるとします。この場合、顧客が削除されても、アドレスと電子メールは削除されるべきではありません。サプライヤーとして、または別の顧客でさえもそれらを参照している可能性があるからです。集約が削除されると、集約境界内のすべてが一度に削除されることを示唆する多くのドキュメントを見てきました。これが集合体の値オブジェクトには適用されないと仮定するのは正しいですか (つまり、それらは不変です...車両集合体に緑色の色オブジェクトがあった場合...車だからといって色を削除することはありません)または、電子メールとアドレスが 2 つのアドレスとして独自のエンティティ (および集合体) である必要があります。
最後に、それらが実際に値オブジェクトである場合、VO が集約ルートを介してのみ作用できる場合、それらを削除する必要がある場合 (アドレスを参照しているサプライヤーまたは顧客が残っていない) をどのように処理しますか?
乾杯、
スティーブ