7

エンティティと値オブジェクトはどちらもドメイン オブジェクトです。DDD でこの 2 つの違いを知っていて、何の役に立つのでしょうか? たとえば、ドメイン オブジェクトをエンティティまたは値オブジェクトのいずれかとして考えると、よりクリーンなドメイン モデルが促進されますか?

4

1 に答える 1

10

はい、特に型を設計および実装しているときに、違いを見分けることができると非常に役立ちます。

主な違いの 1 つは、等値を扱う場合です。エンティティは値オブジェクトとはまったく異なる動作をする必要があるためです。オブジェクトがエンティティか値オブジェクトかを知ることで、その型の等価性をどのように実装する必要があるかがわかります。これはそれ自体が役に立ちますが、それだけではありません。

エンティティは変更可能な型です (少なくとも概念上)。エンティティの背後にある全体的な考え方は、既知の存続期間の進行を伴うドメインの概念を表すということです (つまり、作成され、いくつかの変換が行われ、アーカイブされ、おそらく最終的には削除されます)。それは月や年が経っても同じ特定の「もの」を表し、途中で状態を変えます。

一方、値オブジェクトは、固有の ID を持たずに値を表すだけです。これを行う必要はありませんが、不変型として実装するのに非常に適しています。不変型は定義上、スレッドセーフであるため、これは非常に興味深いことです。マルチコア時代に移行しているため、いつオブジェクトを不変型として実装するかを知ることは非常に重要です。

また、等価セマンティクスがよく知られている場合、単体テストにも大いに役立ちます。どちらの場合も、平等は明確に定義されています。どの言語を使用しているかはわかりませんが、多くの言語 (C#、Java、VB.NET) では、デフォルトで参照によって等価性が決定されます。これは多くの場合、特に有用ではありません。

于 2009-11-24T08:31:58.173 に答える