私はエンティティと値オブジェクトの違いに関する無数の投稿を読んだことがあり、少なくとも概念的には2つがどのように異なるかを理解していると思いますが、これらの投稿の一部では、単に特定のドメインの概念をVOと見なしているようですは不変です(したがって、少なくともその特定のドメインモデル内では、その状態は決して変化しません)。
オブジェクトの状態が特定のドメインモデル内で決して変更されない場合、このオブジェクトがエンティティであってはならないことに同意しますか?どうして?
私はエンティティと値オブジェクトの違いに関する無数の投稿を読んだことがあり、少なくとも概念的には2つがどのように異なるかを理解していると思いますが、これらの投稿の一部では、単に特定のドメインの概念をVOと見なしているようですは不変です(したがって、少なくともその特定のドメインモデル内では、その状態は決して変化しません)。
オブジェクトの状態が特定のドメインモデル内で決して変更されない場合、このオブジェクトがエンティティであってはならないことに同意しますか?どうして?
回答:
本(Evans、2004)によると、「主にそのアイデンティティによって定義されるオブジェクトはENTITYと呼ばれます」。この定義は、オブジェクトが変更可能か不変かには依存しません。不変オブジェクトが特定のドメインのエンティティである可能性ははるかに低いと思います。そのため、オブジェクトが「値オブジェクト」であるか「エンティティ」であるかを判断するのに役立つヒューリスティックですが、それは定義の一部ではありません。
たとえば、直属の上司がいる場合といない場合がある従業員を表すエンティティがあるとします。「null」スーパーバイザオブジェクトへの参照として直接スーパーバイザを持たないという考えを表すことにした場合、「null」スーパーバイザオブジェクトはエンティティと合理的に見なされます。そして、おそらくこの「null」オブジェクトを不変にすることができます。
私がこれを読んだ方法は、値オブジェクトはそれ自体にアイデンティティを持っていないオブジェクトであり、その状態の変化や変化とは何の関係もないということです。これにより、エンティティと値オブジェクトの違いがわかります。エンティティには主キーがありますが、値オブジェクトにはありません。所属するエンティティへの外部キーを持ちます。
http://lostechies.com/joeocampo/2007/04/23/a-discussion-on-domain-driven-design-value-objects/
値オブジェクトのプロパティを変更することはできますが、エンティティとは無関係に識別する必要はありません。