Was ist der Unterschied zwischen Entitäten und Wertobjekten? (Java)?

2 Antworten

Das Value Object Pattern beschreibt eine Art, eine Klasse zu schreiben, sodass man das Objekt so benutzen kann, als wäre es so etwas wie ein Wert:

  • Es "meint" einen Wert,
  • hat keine Identität,
  • ist immer gültig (oder es gibt einen Fehler) und
  • kann nicht verändert werden

Ein hervorragendes Beispiel wären z.B. Währungen.
Wenn Du Betriebsabrechnungen zusammenstellen können willst, musst Du zwischen Brutto- und Netto-Werten unterscheiden können, verwechselst Du das, kann das sehr teuer werden oder unangenehme Briefe zur Folge haben. Du willst das also nicht verwechseln und da bietet sich das Value-Object-Pattern an, Du hast dann eine oder zwei Klassen, die einen/zwei Werte darstellen und sicherstellt/en, dass Brutto und Netto nicht vermischt werden können.

Außerdem kannst Du ein paar Methoden ergänzen, die Du immer brauchst, das macht den Code übersichtlicher. Sei aber vorsichtig damit, falsch eingesetzt, kann dieses Pattern zur Qual werden ^^

Ein aktuelles Beispiel von mir:

Ich arbeite an einer seriellen Schnittstelle zu einem Gerät, dabei werden komplexe Daten mit klar definierter Struktur hin und her geschickt. Natürlich kann ich das aus-programmieren und die Methoden dafür auslagern und wiederverwenden, aber aus den zig Zahlen wird am Ende niemand schlau.
Aus dem Grund habe ich für jeden einzelnen relevanten Wert oder Kombinationen dieser Werte (außer die Anzahl von Ergebnissen) eine Struct (quasi eine Klasse, nur mit Wert-Eigenschaften) geschrieben, die ich dann benutze. Das macht den Code übersichtlicher und ich habe direkt eine Stelle, wohin ich das Lesen/Schreiben der Daten auslagern kann.

DidierStreckx 
Fragesteller
 18.01.2022, 01:48

Danke für die ausführliche Erklärung.

Aber was wären dann Beispiele für Entitäten ?

0
Palladin007  18.01.2022, 02:12
@DidierStreckx

"Entität" ist ein sehr allgemeiner Begriff, mir ist keine einheitliche niedergeschriebene Definition bekannt.

Für mich sind das immer Gegenstücke zu Daten, also Datenbank-Tabellen oder Inhalte einer JSON-Datei. Gerade bei Datenbanken sind ORMs ein großes Thema, da kommt man eigentlich kaum um Entities herum, denn nur dann kann das ORM die Vorteile wirklich ausspielen.
Kommt wahrscheinlich auch ein bisschen daher, da *DAS* große ORM schlechthin im .NET-Bereich "Entity Framework" heißt ^^

0

Diese "Sprechweise" hat nichts mit Java zu tun (wir sprechen hier über ein Entwurfsmuster).

Wertobjekte sind spezielle Entitäten, die unveränderlich sind. D.h. es gibt keinen Setter um den "Wert" zu ändern, das muss per Konstruktor geschehen.

https://de.wikipedia.org/wiki/Value_Object