- Entitäten sollten keinen Gleichheitsvergleich haben (https://www.youtube.com/watch?v=xRCOKKUSp9s).
- Wert Objekte Gleichheitsvergleich haben sollen (https://www.youtube.com/watch?v=xRCOKKUSp9s)
- Wert Objekte können gleich Entitäten (Domain-Driven Design Buch)
- Wert Objekte verweisen, wenn alle (oder einige?) Ihre Attribute gleich sind (dies ist nicht so explizit angegeben, aber es scheint natürlich, 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). Es kann seltene Ausnahmen geben (zB (1, min) == (60, Sekunden)).
Wenn also ein Wertobjekt eine Referenz auf ein Unternehmen hat, wie sollen wir sind Unternehmen in diesem equals()
Vergleich, wenn wir nicht equals()
auf Unternehmen anrufen können? Wo ist der Fehler?Wie wird die Gleichheit von Entitäten und Wertobjekten in DDD ordnungsgemäß implementiert?
Für mich ist es natürlich zu implementieren Entity.equals()
(in der Regel basierend auf Typ und ID). Es ist seltsam, dass ich auf dieses Video gestoßen bin (1).
Ich denke nicht, dass es normalerweise ein gutes Design ist, wenn verschiedene Entitäten alle gleiche Felder haben, aber sich nur in der ID unterscheiden, die von der Datenbank erzeugt wird (naja, vielleicht gibt es einige seltene Ausnahmen). Ich denke, sie sollten in der Regel mindestens einen eindeutigen Satz von Feldern haben (z. B. Personencode, nicht nur Datenbank-generierte Personen-ID). –
Syntax 'entity1.equals (entity2)' ist sauberer als 'entity1.getId(). Equals (entity2.getId()) && entity1.getClass(). Equals (entity2.getClass()) 'erwähnt fehlende Null-Überprüfungen sogar nicht . Auch 'entity1.equals (entity2)' ist sauberer als 'Entities.equal (entity1, entity2)' oder 'Entities.equalIdsAndTypes (entity1, entity2)' (z. B. Objekte in eine Hash-Tabelle einfügen). –
Entitäten müssen IDs haben, aber nicht unbedingt Datenbank generiert. Wenn Sie beginnen, diese ID zu ignorieren und die Entitäten Feld für Feld zu vergleichen, werden Sie den Punkt der Verwendung von Entitäten und Wertobjekten übersehen. –