'Land': Wertobjekt oder Entität in DDD?
Meinungen geschätzt entweder.
Und, wo die Tabelle der Ländernamen / -codes zu speichern? DB? XML? In einer Klasse?
Danke!
Wenn Ihre Domain geographisch oder politisch ist, dann könnte es eine Entität sein, aber im Durchschnitt ist ein Land nur ein Wert, der mit Dingen wie Adressen verbunden ist. In diesem Fall ist es im Kontext Ihres Objektmodells nur ein Wert.
Was das Speichern betrifft, ist das Domänenmodell nicht wirklich wichtig. Sie können die Datenbank verwenden, wenn es Ihnen praktisch erscheint, XML, wenn Sie möchten, und eine Klasse, wenn Sie Verhalten mit Ländern haben.
Eines der Merkmale einer Entität ist, dass sie einen Lebenszyklus hat, d. h., dass sie sich im Laufe der Zeit ändert. Ein Wertobjekt nicht. Tatsächlich sollten Wertobjekte unveränderlich sein. Die Frage, die Sie sich stellen sollten, lautet: "Ändert sich das Landobjekt im Laufe der Zeit?"
Ein weiterer Aspekt, der Entitäten und Wertobjekte unterscheidet, ist, dass zwei Wertobjekte mit denselben Eigenschaften gleich sind. Wenn Sie also eine Instanz eines Landes mit dem Namen "Frankreich" haben, ist es das gleiche wie eine andere Instanz des Landes mit dem Namen "France", obwohl es sich um zwei verschiedene Instanzen handelt (vorausgesetzt, das ist die einzige Eigenschaft) des Landes für diese Diskussion). Denken Sie an Strings in den meisten Sprachen, die Zeichenfolge "fubar" entspricht einer anderen Instanz der Zeichenfolge "fubar".
Entitäten hingegen sind verschieden, selbst wenn sie die gleichen Eigenschaften haben. Ein Kunde mit dem Namen "John Smith" darf nicht mit einem anderen Kunden mit dem Namen "John Smith" identisch sein.
Angesichts dieser Eigenschaften sollten Sie entscheiden können. Da es nur ein "Frankreich" geben kann und es sich im Laufe der Zeit nicht ändert, ist es wahrscheinlich ein Wertobjekt - es sei denn, Ihre App muss mehr über ein Land aufspüren, das sich im Laufe der Zeit ändern kann.
Stellen Sie sich vor:
Sie haben eine andere Entität - Kunde.
Kundenentität verweist auf ein Länderobjekt.
Sie haben 2 Entity-Instanzen mit gefüllten Country-Objekten mit demselben Wert (z. B. "Frankreich")
Sie löschen das Länderobjekt von der ersten Entität (oder dem ersten Entitätsobjekt)
Tags und Links oop domain-driven-design