質問

現在、システム内のエンティティ、バリューオブジェクト、集約を決定しています。次のエンティティが特定されているとします。

顧客、カスタマーメール、電子メール、customerAddress、addressType

顧客 - >電子メールは、顧客 - >アドレス(アドレスタイプを使用)と同様に多くの関係にあります。これらの関係は、CustomerAddressおよびCustomerEmail関係オブジェクトによって表されます。

当初、私はこれが簡単だと思っていました:

エンティティ:顧客、カスタマーメール、カスタマーアドレスバリューオブジェクト:電子メール、アドレス、アドレスタイプ

顧客がすべてのエンティティと上記のVOを含む集合体の総合的なルートである。

私が抱えている問題(そして、これは、私が前進するときに集計の概念について学んでいるので、これは単に、あなたが同じアドレスと電子メールの値オブジェクトを使用して、上記の顧客集約を反映したサプライヤーエンティティを持っていると言います。この場合、顧客が削除された場合、住所はサプライヤーとして削除されるべきではありません。また、別の顧客がまだ参照している場合もあります。集計が削除されたときに、集約境界内のすべてが一度に削除されることを示唆する多くのドキュメントを見てきました。これは集合体の値オブジェクトに適用されないと仮定するのは正しいですか(つまり、それらは不変です...車両の集合体に緑色の色を緑色にした場合...削除されました)または、電子メールと住所が2つのアドレスとして独自のエンティティ(および集約)がありますが、同じ属性を持っている可能性がありますが、実際の個別のアイデンティティです(つまり、1つはサプライヤーアドレスです。もう1つは顧客アドレスですか?)

最後に、それらが実際にバリューオブジェクトである場合、VOが総合的なルートを介してしか行動できない場合、それらを削除する必要がある場合(サプライヤーまたは顧客が住所を参照することはありません)、どのように処理するのですか?

乾杯、

スティーブ

役に立ちましたか?

解決

データベースのサーマでドメインについて考えています。これは推奨されません。

上記の顧客集計を反映したサプライヤーエンティティ

これは、ドメインの概念が欠けていることを示唆しています。この「ミラーリング」はあなたのドメインの専門家にとって何を意味しますか?実際にそれらの間に関係がある場合は、明示的にモデル化する必要があります。

あなたは「顧客 - >電子メールは多くの関係から多くの関係です」と言います。あなたのドメインにとって、電子メールが複数の顧客が共有していることは意味がありますか?はい、それはもう一度あなたはおそらく概念を欠いているでしょう。この関係についてドメインの専門家が言わなければならないことを確認してください。多くの人にとってはそれほど多くないが、電子メールが顧客エンティティが「所有している」値オブジェクトであるよりも多くの人にとっては多くの人であれば。これで、顧客が電子メールまたはアドレスを所有している場合、制限なしに削除(または行動する)ことができます。

DDDの最も難しいことの1つは、常に集合体間でエンティティを共有しようとすることになることです。しないでください。骨材の穴点、つまり一貫性の境界を倒します。代わりに、ドメインの専門家の助けを借りて、ARS間の境界を明確にする欠落している概念を特定します。

私はそれがすべて抽象的に聞こえることを知っています(私は過去にこのような質問をしました)が、真実は、あなたのドメインの専門家だけがあなたがより良いモデルをするのを助けることができるということです。

そして最後のアドバイスとして-Re(-re x 100)エリック・エヴァンスの本を読むことは通常役立ちます:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top