- Les entités ne doivent pas avoir de comparaison d'égalité (https://www.youtube.com/watch?v=xRCOKKUSp9s).
- objets de valeur doivent avoir la comparaison de l'égalité (https://www.youtube.com/watch?v=xRCOKKUSp9s)
- objets de valeur peuvent faire référence entités (livre de Domain-Driven Design)
- objets de valeur sont égaux si tous (ou une?) De leurs attributs sont égaux (celui-ci est pas si explicitement indiqué, mais il semble naturel, 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). Il peut y avoir de rares exceptions (par exemple, (1, min) == (60, secondes)).
Donc, si un objet de valeur a une référence à une entité, comment doit-on inclure dans cette comparaison entité equals()
si nous ne pouvons pas appeler equals()
sur l 'entité? Où est la faille?Comment implémenter correctement l'égalité des entités et des objets de valeur dans DDD?
Pour moi, il est naturel d'implémenter Entity.equals()
(généralement basé sur le type et l'ID). C'est étrange que j'ai rencontré cette vidéo (1).
Je ne pense pas que ce soit habituellement un bon design si différentes entités ont toutes des champs égaux mais ne diffèrent que par l'ID, qui est généré par la base de données (enfin, il y a peut-être de rares exceptions). Je pense qu'ils devraient généralement avoir au moins un ensemble unique de champs (par exemple, le code de la personne, pas seulement l'ID de la personne générée par la base de données). –
Syntaxe 'entity1.equals (entity2)' est plus propre que 'entity1.getId(). Est égal à (entity2.getId()) && entity1.getClass(). Est égal à (entity2.getClass())' même ne mentionne pas les vérifications manquantes manquantes . Aussi 'entity1.equals (entity2)' est plus propre que 'Entities.equal (entity1, entity2)' ou 'Entities.equalIdsAndTypes (entity1, entity2)' (considérez, par exemple, placer des objets dans une table de hachage). –
Les entités doivent avoir des ID mais pas nécessairement la base de données générée. Si vous commencez à ignorer cet ID et à comparer les entités par champ, il vous manquera le point d'utiliser les entités et les objets de valeur. –