1

Customer2 つの集約ルートとOrder「共有」エンティティで構成されるモデルのシナリオを考えてみましょうAddress

また、 には次のサブクラスがあるAddressことに注意してください: 、および。abstractPhysicalAddressPostOfficeBoxAddressPrivateBagAddress

Customerは、ある種のアドレス帳に整理された多数のアドレスを持つことができます。注文時に、顧客はAddressアドレス帳から配送先住所として使用する を選択します。

最初は 2 つのエンティティ間でアドレスを共有することを考えていましたが、それぞれの不変条件の管理に問題が生じるため、オプトアウトしました。

もう 1 つの選択肢として、 の 2 つの階層を作成しAddress、それぞれを顧客の住所または配送先住所として使用する方法があります。繰り返しコードがたくさんあるので、これも正しくないようです。

この状況を適切にモデル化するにはどうすればよいでしょうか?

4

1 に答える 1

2

エンティティとは、顧客や注文など、それ自体で存在できるはずのものです。ただし、アドレスはエンティティではありません。アドレスは値型であり、単独では存在できません。したがって、次のようになります。

  1. アドレスは、エンティティ内で集約される値の型としてのみ存在できます
  2. アドレス階層をドメインの値タイプとして定義できますが、多くのエンティティがこれを使用する可能性があります。

Address、MoneyType など、これらのタイプのエンティティに常に遭遇することがわかります。

解決策は、ドメインに 1 つのアドレス階層値タイプを作成することです。次に、任意のエンティティは、該当する場合にプロパティとして Address を持つことができます

于 2012-10-11T15:24:14.113 に答える