ドメイン駆動型デザインでは、アイデンティティを持つオブジェクトがエンティティであることはよく知られています。例えば、どんな人もアイデンティティ(名前など)をいくつか持っています。エンティティ/値オブジェクトの選択
しかし、値オブジェクトは同一性のないオブジェクトです。共通の値オブジェクトの1つはアドレスですが、アドレスには同一性がありません。しかし、データベース層では、複合キーを持つことができます。このコンセプトはDDDで機能しますか?道路名、郵便番号、ドア番号(市町村などの情報は省略)の組み合わせで住所を識別できるようになります。お金は別の価値オブジェクトです。
単一の識別可能なフィールドを持たないオブジェクトでは区別があり、値オブジェクトは実際にエンティティに属していない傾向があります。たとえば、「私」(私の名前に置き換えられる)は靴などを着用するかもしれないが、「私は靴、シャツなどではない」(http://www.lostechies.com/blogs/joe_ocampo/archive/2007/04/23/a-discussion-on-domain-driven-design-value-objects.aspx)。
これは物事を考える正しい方法ですか?また、この考え方/アプローチでは、これをC#の値/参照型選択に適用できます。私はDDDのアプローチにもかかわらず行くかもしれない?おそらく、より良いあなたが一致言って - 私は、彼らがドメイン駆動設計中で理解されているように私はこれまで、この問題の専門家から午前かかわらず、あなたは(正しいエンティティと値型の区別の概念を持っていると思う
おかげ
エンティティ/値オブジェクトの区別は、C#のクラスと構造体の選択に役立ちます。私は例外が発生する可能性のある考慮事項があると確信しています(逆のタイプを選択すると、オブジェクトに関する他のすべての事実が1つのタイプに適しています)。ただし、アドレス(建物)を変更することはできます。これは変更可能ではありませんか?エンジンは構造体と小さなアイテムの複合体ですが、変更することもできます。 – dotnetdev
正直なところ私はあなたのコメントに完全に従っているかどうかはわかりませんが、アドレスの変更に関して、私が不変のクラスを提案したのは、人物Aのアドレスへの変更が、あなたがAという人のために新しいユニークなインスタンスを作成するように強制するので、アドレスクラスのインスタンスを作成する必要があります。これはstructから得られる主な利点であり、私はクラスで同じ動作をすることが可能であることを示しています。 –
ビジネスの観点から見ると少し難解です。 たとえば、家族には家がありますが、これも参照型です。子供たちが若いとき、彼らは家を動かすことはないので、家は共通の参考資料です。 – dotnetdev