DDD:不変オブジェクトもエンティティになることができますか?


9

私はエンティティと値オブジェクトの違いに関する無数の投稿を読んだことがあり、少なくとも概念的には2つがどのように異なるかを理解していると思いますが、これらの投稿の一部では、単に特定のドメインの概念をVOと見なしているようですは不変です(したがって、少なくともその特定のドメインモデル内では、その状態は決して変化しません)。

オブジェクトの状態が特定のドメインモデル内で決して変更されない場合、このオブジェクトがエンティティであってはならないことに同意しますか?どうして?


これらの質問のいくつかにインテリジェントに答えられるように、私はいくつかのDDDを学ぶ必要があります。多くのソフトウェア開発者がこのような単純な概念で抱えている困難は、DDDがプログラミング方法論であるという誤った考えから生じているのではないかと思います。
Robert Harvey

回答:


4

本(Evans、2004)によると、「主にそのアイデンティティによって定義されるオブジェクトはENTITYと呼ばれます」。この定義は、オブジェクトが変更可能か不変かには依存しません。不変オブジェクトが特定のドメインのエンティティである可能性ははるかに低いと思います。そのため、オブジェクトが「値オブジェクト」であるか「エンティティ」であるかを判断するのに役立つヒューリスティックですが、それは定義の一部ではありません。

たとえば、直属の上司がいる場合といない場合がある従業員を表すエンティティがあるとします。「null」スーパーバイザオブジェクトへの参照として直接スーパーバイザを持たないという考えを表すことにした場合、「null」スーパーバイザオブジェクトはエンティティと合理的に見なされます。そして、おそらくこの「null」オブジェクトを不変にすることができます。


1
+1マネージャーは、特定のコンテキストまたはサブドメインで読み取り専用(不変)である場合がありますが、それはIDがないことを意味するものではありません。
エイドリアンシュナイダー、

密集していることを許してください。しかし、監督者の例を完全には理解していません。ドメインでは、監督者に関連する2つの概念があるとおっしゃっていますか?1つの概念は、監督する従業員がいるスーパーバイザを表します(コードでは、この概念は変更可能なスーパーバイザクラスとして実装されます)。もう1つの概念は、従業員を監督しないスーパーバイザを表します(この概念は、コードではnullとして実装されます) ?
bckpwrld 2014年

@bckpwrldいいえ、彼は確かにNullオブジェクトを意味します。
maaartinus 2014

2

私がこれを読んだ方法は、値オブジェクトはそれ自体にアイデンティティを持っていないオブジェクトであり、その状態の変化や変化とは何の関係もないということです。これにより、エンティティと値オブジェクトの違いがわかります。エンティティには主キーがありますが、値オブジェクトにはありません。所属するエンティティへの外部キーを持ちます。

http://lostechies.com/joeocampo/2007/04/23/a-discussion-on-domain-driven-design-value-objects/

値オブジェクトのプロパティを変更することはできますが、エンティティとは無関係に識別する必要はありません。


リレーショナルデータベース(主キー)の用語を、比喩としてのアイデンティティとして混在させました。文字どおり
Kevin

少なくとも私の理解では、コード内でVOが可変型で表現されている場合(したがって、この型のインスタンスはプロパティを変更できる)であっても、概念的にはこれらのVOは不変です。したがって、特定のVOを表すインスタンスのプロパティを変更すると、この同じインスタンスが別のVOを表すことになります。言い換えれば、VOは概念的には常に不変です
bckpwrld
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.