Value Object
Ein Value Object verbindet Werte, deren Kombination und Gleichheit fachlich Bedeutung tragen.
- BestandteileBetrag und Währung bilden einen fachlichen Wert.
- WertgleichheitAlle relevanten Bestandteile stimmen überein.
- ErsatzwertEine fachliche Änderung erzeugt einen neuen Wert.
Einordnung
Warum das wichtig ist
Ein Betrag ohne Währung ist unvollständig. Ein Wertobjekt hält die fachlich zusammengehörigen Angaben und Regeln zusammen. Eine Änderung wird als neuer Wert ausgedrückt; frühere Werte bleiben nachvollziehbar.
Fachliche Wertmodellierung ohne eigene Objektidentität.
Auf einen Blick · Werte bestimmen Gleichheit
Gleiche Werte, gleicher Geldbetrag
Die zwei Tassen in B-1042 kosten zusammen 49,90 EUR. Vergleiche identische Beträge, verschiedene Währungen und dieselben Adressangaben. Die USD-Variante dient ausschließlich dem Vergleich.
So liest du das Bild
- Bestandteile Beide Felder sind als Vergleichsfelder hervorgehoben.
- Wertgleichheit 49,90 EUR ist gleich 49,90 EUR, aber verschieden von 49,90 USD.
- Ersatzwert Der Vergleich zeigt Werte; die Zeitleiste zeigt ihren Austausch.
Geldbetrag
betrag49,90 (Vergleichsfeld)waehrungEUR (Vergleichsfeld)
Geldbetrag
betrag49,90 (Vergleichsfeld)waehrungEUR (Vergleichsfeld)
gleicher WertVergleich über Werte. Betrag und Währung stimmen überein. Eine eigene Kennung gibt es nicht, also sind beide Beträge austauschbar.
Die Bestellung bleibt dieselbe Entity, auch wenn sich ein enthaltener Wert vor ihrer Bestätigung ändert.Identität über die Zeit verfolgen
Ein neuer Wert ersetzt den alten
- 01
Ausgangswert · 49,90 EUR
Betrag und Währung werden gemeinsam gespeichert.
- 02
Rabatt berechnen · 44,90 EUR
Die Berechnung erzeugt einen neuen gültigen Geldwert.
- 03
Neuen Wert übernehmen
Die aktuelle Berechnung verwendet 44,90 EUR. Der ursprüngliche Wert bleibt unverändert.
Nutzen & Grenzen
Hilft, wenn
- Primitive Felder bilden gemeinsam eine bedeutungsvolle Einheit oder eigene Regeln ab.
- Wertgleichheit entspricht dem fachlichen Vergleich und ist unabhängig von Speicheridentität.
Grenzen
- Ein Value Object ist nicht automatisch überall unveränderlich; Unveränderlichkeit ist eine bewusste Entwurfsentscheidung mit klaren Vorteilen.
- Historische Werte müssen erhalten bleiben, wenn eine Änderung vergangene Vorgänge nicht rückwirkend verändern darf.
In der Praxis
- Bestimme, welche Werte eine fachliche Einheit bilden und welche Kombinationen ungültig wären. Nimm Felder nur dann gemeinsam auf, wenn Fachleute ihnen zusammen eine Bedeutung geben.
- Lege fest, welche Felder Wertgleichheit bestimmen und welche Regeln der Wert selbst prüft. Schreibe den Vergleich so auf, dass Fachlogik und Tests dieselbe Gleichheitsdefinition verwenden.
- Modelliere eine Wertänderung als Ersatz durch einen neuen Wert und prüfe, ob abgeschlossene Bestellungen den bestätigten Stand behalten müssen. Verwende dafür eine Kopie oder Version statt stiller Mutation.
Ausführliche Erklärung lesen
Value Objects kapseln Regeln für ihre Werte und werden üblicherweise unveränderlich gestaltet. Zwei Instanzen mit gleichen relevanten Werten gelten im Modell als gleich. Änderungen erzeugen einen neuen Wert, statt dieselbe Instanz still zu verändern.
Die Gleichheitsregel richtet sich nach der Bedeutung des Modells: Bei Geld können Betrag und Währung zusammengehören; bei einer Adresse bestimmen die benötigten Adressbestandteile den Wert. Aggregate entscheiden, welche Beziehungen und Änderungen konsistent gehalten werden.
Eine stabile Identität kennzeichnet die Entity; ein Aggregate hält zusammengehörige Änderungen konsistent.
Selbst prüfen
Teste dich in drei Stufen
AblesenIm Bild nachsehen
Warum sind 49,90 EUR und 49,90 USD verschiedene Werte?
Lösung mit Begründung ansehen
Die Währung ist Teil der Wertgleichheit. Gleiche Zahlen mit verschiedenen Währungen sind verschiedene Geldwerte.
AnwendenAuf eine neue Lage übertragen
Der Kunde ändert seine Adresse. Wie wird der neue Wert ausgedrückt?
Lösung mit Begründung ansehen
Als neues Value Object, das die bisherige Adresse ersetzt.
BewertenEine Alternative abwägen
Warum braucht eine vergangene Bestellung eventuell die alte Adresse?
Lösung mit Begründung ansehen
Damit die Änderung den historischen Vorgang nicht rückwirkend verfälscht.
Vertiefen
Diese Bausteine führen die Gedanken dieser Seite weiter.
Quellen
- Eric Evans · DDD Reference (öffnet in neuem Tab)Primärreferenz zu Entities und Value Objects.
- DDD Referenz · Übersetzung (öffnet in neuem Tab)Deutsche Fassung der Referenz von Eric Evans.
- Vaughn Vernon · Implementing Domain-Driven Design (öffnet in neuem Tab)Behandelt taktische Modellbausteine in Beispielen.