ValueObjects in C#: Eine grundlegende Einführung

ValueObjects in C#: Eine grundlegende Einführung

13. März 2024 | Gregor Koletzki | 3 Min. Lesezeit

In der Welt der Softwareentwicklung gibt es Konzepte und Praktiken, die dazu beitragen, robuste, wartbare und skalierbare Anwendungen zu erstellen. Eines dieser Konzepte sind "ValueObjects", ein Begriff, der in der objektorientierten Programmierung verwendet wird, um Daten zu modellieren, die einen bestimmten Wert repräsentieren. In diesem Artikel werden wir uns genauer mit ValueObjects in C# befassen, warum sie wichtig sind und wie man sie in seinen Code integrieren kann.

Was sind ValueObjects?

Ein ValueObject ist ein Objekt in der Programmierung, das seinen Wert durch seine Eigenschaften und nicht durch eine eindeutige Identität definiert. Anders als bei Entitäten, die durch eine eindeutige ID identifiziert werden, wird ein ValueObject durch den Wert seiner Eigenschaften bestimmt. Zum Beispiel könnte ein Datum ein ValueObject sein - zwei Datumsobjekte mit demselben Tag, Monat und Jahr haben denselben Wert, unabhängig davon, ob sie sich an verschiedenen Stellen im Code befinden oder nicht.

Warum sind ValueObjects wichtig?

Unveränderlichkeit (Immutable): ValueObjects sind in der Regel unveränderlich, was bedeutet, dass ihre Eigenschaften nach ihrer Initialisierung nicht geändert werden können. Dies fördert eine robuste Programmierung, da sie nicht versehentlich geändert werden können und daher sicher für den Einsatz in parallelen oder verteilten Umgebungen sind.
Verbesserte Lesbarkeit und Wartbarkeit: Durch die Verwendung von ValueObjects können Sie Ihren Code lesbarer und wartbarer machen. Durch die Benennung von ValueObjects entsprechend ihres Zwecks und ihrer Bedeutung wird der Code klarer und verständlicher.
Sicherstellung der Datenkonsistenz: Da ValueObjects unveränderlich sind, tragen sie dazu bei, die Konsistenz Ihrer Daten sicherzustellen. Wenn Sie beispielsweise ein Datum als ValueObject verwenden, können Sie sicher sein, dass es sich während der Laufzeit Ihrer Anwendung nicht ändert.

Implementierung von ValueObjects in C#

In C# können Sie ValueObjects implementieren, indem Sie einfache Klassen erstellen, die unveränderlich sind und ihre Gleichheit basierend auf ihren Eigenschaften bestimmen. Hier ist ein einfaches Beispiel, wie Sie ein Datum als ValueObject implementieren könnten:

public class Date : IEquatable<Date>
{
    public int Day { get; }
    public int Month { get; }
    public int Year { get; }

    public Date(int day, int month, int year)
    {
        Day = day;
        Month = month;
        Year = year;
    }

    public bool Equals(Date other)
    {
        if (other == null) return false;
        return Day == other.Day && Month == other.Month && Year == other.Year;
    }

    public override bool Equals(object obj)
    {
        if (obj == null || GetType() != obj.GetType()) return false;
        return Equals((Date)obj);
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(Day, Month, Year);
    }
}

In diesem Beispiel ist die Date-Klasse ein ValueObject, das den Tag, den Monat und das Jahr repräsentiert. Die Klasse implementiert das IEquatable-Interface, um die Gleichheit mit anderen Date-Objekten zu überprüfen, und überschreibt die Equals()- und GetHashCode()-Methoden entsprechend.

Value Objects in C# ab Version 9.0

C# Records bieten eine spezielle Syntax für die Erstellung von unveränderlichen (immutable) Datenstrukturen, die besonders gut für ValueObjects geeignet sind. Ein Record in C# ist eine Datenstruktur, die aus einer Liste von Datenfeldern besteht, die automatisch in einen unveränderlichen Typ übersetzt werden. Records bieten auch eingebaute Unterstützung für Wertvergleiche, was bedeutet, dass zwei Records als gleich betrachtet werden, wenn ihre Felder den gleichen Wert haben.

Das obere Beispiel für ein ValueObject kann man jetzt mit Records vereinfachter schreiben:

public record Date(int Day, int Month, int Year);

Vorteile von C# Records für Wertobjekte

Die Verwendung von C# Records zur Erstellung von ValueObjects bietet mehrere Vorteile:

  • Kürzere und prägnantere Syntax im Vergleich zu herkömmlichen Klassen.
  • Eingebaute Unterstützung für Wertvergleiche und Unveränderlichkeit.
  • Automatische Generierung von Konstruktoren, Eigenschaften und Gleichheitsprüfungen durch den Compiler.

Fazit

ValueObjects sind ein wichtiges Konzept in der objektorientierten Programmierung, das dazu beiträgt, robusten, wartbaren und skalierbaren Code zu schreiben. Durch die Verwendung von ValueObjects können Sie die Lesbarkeit und Wartbarkeit Ihres Codes verbessern, die Datenkonsistenz sicherstellen und Fehler reduzieren. In C# können ValueObjects einfach durch die Erstellung unveränderlicher Klassen implementiert werden, die ihre Gleichheit basierend auf ihren Eigenschaften bestimmen.

Weiterführende Artikel

Kategorien

Kontaktieren Sie uns:

Harksheider Weg 60H,
25451 Quickborn
+49 1520 40 73 253
info@gk-itsolutions.de

Schnellzugriff:

Folgt uns auf: