Eigenständiger BegriffBegriffKapitel I · Domäne · Baustein 8 von 18

Value Object

Ein Value Object verbindet Werte, deren Kombination und Gleichheit fachlich Bedeutung tragen.

  1. BestandteileBetrag und Währung bilden einen fachlichen Wert.
  2. WertgleichheitAlle relevanten Bestandteile stimmen überein.
  3. 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

Ein anderer Betrag erzeugt einen anderen Wert.
Shop-Beispiel · Gleichheitstest

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

  1. Bestandteile Beide Felder sind als Vergleichsfelder hervorgehoben.
  2. Wertgleichheit 49,90 EUR ist gleich 49,90 EUR, aber verschieden von 49,90 USD.
  3. 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.

Betrag und Währung bilden gemeinsam den Geldwert. Wähle die USD-Variante: Der gleiche Zahlenwert allein reicht nicht.

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

  1. 01

    Ausgangswert · 49,90 EUR

    Betrag und Währung werden gemeinsam gespeichert.

  2. 02

    Rabatt berechnen · 44,90 EUR

    Die Berechnung erzeugt einen neuen gültigen Geldwert.

  3. 03

    Neuen Wert übernehmen

    Die aktuelle Berechnung verwendet 44,90 EUR. Der ursprüngliche Wert bleibt unverändert.

Hypothetische Rabattvariante vor Bestellbestätigung. Historische Bestellwerte werden dabei nicht rückwirkend verä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

  1. 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.
  2. 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.
  3. 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

  1. 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.

  2. 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.

  3. 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.

Weiter im Lernpfad

Als Nächstes in Domänenmodellierung & DDD: Entity.

18 Bausteine

Weiter mitEntity