Web アプリケーションのエンティティと値オブジェクト
-
09-06-2019 - |
質問
単純なドメイン モデルがあります。連絡先、電話番号、および ContactRepository。連絡先はエンティティであり、ID フィールドがあります。TelephoneNumber は典型的な値オブジェクトです。には ID がないため、Contact インスタンスとは別にロードできません。
反対側には、連絡先を操作するための Web アプリケーションがあります。最初のページは「ContactList」、次のページは「Contact/C0001」で、連絡先の詳細と電話番号のリストが表示されます。
電話番号編集フォームを実装する必要があります。最初の近似は、「ThelephoneNumber/T0001」のようにナビゲート可能なページを追加することです。
ただし、ThelephoneNumber は Value オブジェクト クラスであり、そのインスタンスはこの方法では識別できませんでした。
この問題を解決するためのベストプラクティスは何ですか?ステートレス アプリケーション内の識別不可能なオブジェクトをどのように識別できるでしょうか?
解決
オブジェクトの状態の値はその特定のインスタンスを識別しますか?そうでない場合は、編集フォームの送信時に古い値と新しい値を返し、古い状態のオブジェクトを新しい状態に更新することができます。
むしろ、Contact/C0001/ThelephoneNumber のようなページを作成し、連絡先 ID と値オブジェクト クラスの両方を使用して、変更するインスタンスを識別したいと思います。
私があなたの質問を完全に誤解していない限り。
他のヒント
TelephoneNumber に一連の数字を含めるようにして (複数形にすることもできます)、次のように参照します。連絡先/C0001/電話番号
実際には、デザイン上厳密に必要ではない場合でも、電話番号に識別性を与える方が簡単だと常に感じています。
それが連絡先のコンテキストの外には存在できない厳密な値のオブジェクトである場合、優れたユーザー インターフェイスでは電話番号を独自のページではなく連絡先ページ内で編集する必要があることを示します。
ただし、これら 2 つのアプローチのいずれかを選択しない場合は、Marc Gear のソリューションが良い解決策だと思います。
多くの人があなたに信じたいと思っていることにもかかわらず、あなたは 100% 純粋であることはできません。
値オブジェクトには、何らかの ID フィールドが必要です。電話番号などのオブジェクトにとって固有のものである場合もあれば、TelephoneNumber.Id などの人為的なものでなければならない場合もあります。
これを受け入れるのが早ければ早いほど、あなたにとって良いことになります:-)