2009-11-23 19 views
6

エンティティと値オブジェクトは両方ともドメインオブジェクトです。 DDDの2つの区別を知っているのは何ですか?例えば、ドメインオブジェクトをエンティティまたは値オブジェクトとして考えると、よりクリーンなドメインモデルが得られますか?DDD:エンティティと値オブジェクトの違いは何ですか?

答えて

9

ありがとうございます。特に、タイプを設計して実装する場合は、その違いを理解することが非常に役立ちます。

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

エンティティは(少なくとも概念によって)変更可能なタイプです。エンティティの背後にある全体のアイデアは、それが知られている生涯進行(すなわち、それが作成され、いくつかの変換を受け、アーカイブされ、おそらく最終的に削除される)ドメイン概念を表すということである。たとえ月や年が過ぎても同じ特定の「もの」を表すを表し、途中で状態が変化します。

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

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

関連する問題