- エンティティは等価比較(https://www.youtube.com/watch?v=xRCOKKUSp9s)を持つべきではありません。
- 値オブジェクトが等価比較を持っている必要があります(https://www.youtube.com/watch?v=xRCOKKUSp9s)は、エンティティ(ドメイン駆動設計・ブック)すべて(または一部?)その属性のが等しい場合
- 値のオブジェクトが等しいを参照することができ
- 値オブジェクト(これは、そのように明示されていないが、自然のようだ、https://martinfowler.com/bliki/ValueObject.html,http://enterprisecraftsmanship.com/2016/01/11/entity-vs-value-object-the-ultimate-list-of-differences/、https://projectlombok.org/features/Value)。まれな例外がある可能性があります(たとえば、(1、min)==(60、seconds))。
値オブジェクトは、エンティティへの参照を持っている場合、我々は実体上equals()
を呼び出すことはできませんのであれば、どのように我々はそのequals()
比較してエンティティを含める必要がありますか?欠陥はどこですか?DDDでエンティティと値オブジェクトの等価性を正しく実装するにはどうすればよいですか?
私にとっては、Entity.equals()
(通常はタイプとIDに基づいて)を実装するのは当然です。私はそのビデオ(1)に遭遇したことは奇妙です。
構文 'entity1.equals(entity2)'は 'entity1.getId()。equals(entity2.getId())&&& entity1.getClass()。equals(entity2.getClass())'よりもクリーンです。 。また、 'entity1.equals(entity2)'は 'Entities.equal(entity1、entity2)'や 'Entities.equalIdsAndTypes(entity1、entity2)'よりもクリーンです(たとえば、オブジェクトをハッシュテーブルに置くことを考えてください)。 –
エンティティにはIDが必要ですが、必ずしもデータベースが生成される必要はありません。そのIDを無視してエンティティをフィールドごとに比較を開始すると、エンティティと値オブジェクトを使用するポイントがなくなります。 –