0

この質問には少し背景があります....

DB IDとエンティティを持つ値オブジェクトを使用したDDDクラス設計のジレンマ

誰も私の質問に説得力のある答えをくれなかったので、私の質問を言い換えて、疑問の恩恵に答えた人々に伝えます. たぶん、私は自分の質問を正しく提示していませんでした。

この時点で、あなたは私の最初の質問を読んでいると思います。

したがって、ContactInfo は User に属しているため、ドメイン ID を持つ必要はありません。ユーザーなしでは「存在できません」。それは他のクラスとコレクション (データベースから来る) をラップするクラス (nhibernate コンポーネント) に他ならないので、新しいインスタンスに置き換えたい場合、不変にするのは悪夢です。n 個のパラメーターを持つコンストラクター全体を作成し、オブジェクト グラフ全体を再作成する必要があります。これは、住所コレクション内の 1 つの通りを更新したかったからです。私の目には、ばか。

では、ContactInfo とは一体何なのでしょうか。変更可能な ValueObject? DDD の第一人者である Evan は、「mutable valueobject」に関する Google アラートと、これら 2 つの用語が出現するたびに送信するエクソシストを手元に置いていると確信しています。

私はこれについて非常に混乱しています。私は「f ... it」のようなプログラマーになりたくないので、かなり行き詰まっていて、単に ContactInfo を可変にしたくないからです(しかし、この時点では選択の余地がありません)。したがって、DDD の概念について独自の解釈 (および実装) を行う前に、いくつか意見を述べたいと思います。

PS: これは失礼かもしれませんが、Evan の本からの回答をコピー アンド ペーストしないでください。抽象的な概念でもありません。Order と Orderline については誰もが知っています。構造体と参照型、Blog、Post、Comments についても知っています。これは、この問題について知っておく必要があるすべての特定のシナリオです...そのため、このシナリオに対する具体的な回答をいただければ幸いです。

ありがとう :)

4

1 に答える 1

1
  1. 「なしでは存在できない」ルールは、必ずしも値オブジェクトではなく、ルートのサブエンティティにほとんど適用されます。ContactInfoエンティティが集約ルートでない限り、不変の値オブジェクトを含むエンティティを見ても驚かないでしょう。

  2. ContactInfo頭からつま先まで不変の値オブジェクトになりたいが、95% 類似したオブジェクトを再インスタンス化する手間がかからない場合は、Builder バリアントを作成し、既存のものとはわずかに異なるインスタンスを生成することができます。短くエレガントな方法。のようなものContactInfo.BuildFrom(oldContactInfo).WithPrimaryAddress(newPrimaryAddress)

とにかく、私のアドバイスは、分析麻痺に陥らずに、1 つの解決策を選択することです。間違っている場合は訂正してください。ただし、これらのクラスがシステムの重要な部分であるとは思えないため、影響を最小限に抑えて後でいつでもリファクタリングできます。

于 2012-12-12T17:12:03.030 に答える