DDD: Können unveränderliche Objekte auch Entitäten sein?

9

Ich habe unzählige Beiträge zu Unterschieden zwischen Entitäten und Wertobjekten gelesen, und obwohl ich denke, dass ich zumindest konzeptionell verstehe, wie sich die beiden unterscheiden, scheint es, dass Autoren in einigen dieser Beiträge ein bestimmtes Domänenkonzept einfach deshalb als VO betrachten ist unveränderlich (daher wird sich sein Zustand zumindest innerhalb dieses bestimmten Domänenmodells niemals ändern).

Stimmen Sie zu, dass dieses Objekt niemals eine Entität sein sollte, wenn sich der Status eines Objekts innerhalb eines bestimmten Domänenmodells niemals ändert? Warum?

bckpwrld
quelle
Ich muss etwas DDD lernen, damit ich einige dieser Fragen intelligent beantworten kann. Ich vermute, dass die Schwierigkeit, die viele Softwareentwickler mit einfachen Konzepten wie diesem haben, auf der falschen Vorstellung beruht, dass DDD eine Programmiermethode ist.
Robert Harvey

Antworten:

4

Nach dem Buch (Evans, 2004) heißt es: "Ein Objekt, das hauptsächlich durch seine Identität definiert wird, wird als ENTITÄT bezeichnet." Diese Definition ist unabhängig davon, ob das Objekt veränderlich oder unveränderlich ist. Ich denke, es ist viel weniger wahrscheinlich, dass ein unveränderliches Objekt eine Entität in einer bestimmten Domäne ist, daher ist es eine nützliche Heuristik, um zu entscheiden, ob ein Objekt ein "Wertobjekt" oder eine "Entität" ist, aber das ist nicht Teil der Definition.

Angenommen, Sie haben eine Entität, die einen Mitarbeiter vertritt, der möglicherweise einen direkten Vorgesetzten hat oder nicht. Wenn Sie sich dafür entscheiden, die Idee, keinen direkten Supervisor zu haben, als Referenz auf ein "null" Supervisor-Objekt darzustellen, wird das "null" Supervisor-Objekt vernünftigerweise als Entität betrachtet. Und Sie könnten dieses "Null" -Objekt wahrscheinlich unveränderlich machen.

Aidan Cully
quelle
1
+1 Der Manager kann in einem bestimmten Kontext oder einer bestimmten Subdomain schreibgeschützt (unveränderlich) sein, dies bedeutet jedoch nicht, dass er keine Identität hat.
Adrian Schneider
Verzeihen Sie mir, dass ich dicht bin, aber ich verstehe Ihr Beispiel als Vorgesetzter nicht ganz. Wollen Sie damit sagen, dass wir in der Domäne zwei Supervisor-Konzepte haben würden? Ein Konzept würde Vorgesetzte darstellen, die Mitarbeiter haben, die sie beaufsichtigen (im Code würde dieses Konzept als veränderbare Supervisor-Klasse implementiert), während das andere Konzept Vorgesetzte beschreiben würde, die keine Mitarbeiter beaufsichtigen (und dieses Konzept würde im Code als null implementiert). ?
bckpwrld
@bckpwrld Nein, er meint sicherlich ein Null-Objekt .
Maaartinus
2

Ich habe dies so gelesen, dass ein Wertobjekt ein Objekt ist, das keine Identität für sich hat und nichts damit zu tun hat, dass sich sein Zustand ändert oder nicht ändert. Dies macht den Unterschied zwischen einer Entität und einem Wertobjekt aus, dass eine Entität einen Primärschlüssel hat, während ein Wertobjekt dies nicht tut. Es hat einen Fremdschlüssel für die Entität, zu der es gehört.

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

Ich kann die Eigenschaften des Wertobjekts weiterhin ändern, es muss jedoch niemals unabhängig von seiner Entität identifiziert werden.

Kevin
quelle
Ich habe Terminologie aus relationalen Datenbanken (Primärschlüssel) als Identität als Metapher eingemischt, bitte nehmen Sie es nicht wörtlich
Kevin
Zumindest nach meinem Verständnis sind diese VOs konzeptionell immer noch unveränderlich, selbst wenn sie im Code mit einem veränderlichen Typ dargestellt werden (daher können Instanzen dieses Typs ihre Eigenschaften ändern). Das Ändern einer Eigenschaft einer Instanz, die eine bestimmte VO darstellt, bedeutet also, dass dieselbe Instanz nun eine andere VO darstellt. Mit anderen Worten, VOs sind konzeptionell immer unveränderlich
bckpwrld