csharp / expert
Snippet
Domain-Driven Value-Types mittels Readonly Record Structs
Die Verwendung von Readonly Record Structs für Domain-IDs verhindert 'Primitive Obsession' und garantiert Typsicherheit. Im Gegensatz zu Klassen werden sie auf dem Stack alloziert (was die Performance steigert) und bieten eine integrierte wertbasierte Gleichheit, ideal für Hochleistungs-Domain-Modellierung.
snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public readonly record struct TransactionId(Guid Value){public static TransactionId New() => new(Guid.NewGuid());public override string ToString() => Value.ToString("D");}public sealed class PaymentProcessor{public void Process(TransactionId id, decimal amount){if (amount <= 0) throw new ArgumentOutOfRangeException(nameof(amount));// Logic processing the unique domain type}}
Erklärung
1
public readonly record struct TransactionId(Guid Value)
Definiert einen unveränderlichen Werttyp mit vom Compiler generierter Gleichheit und Dekonstruktion.
2
public void Process(TransactionId id, ...)
Erzwingt domänenspezifische Typen in Methodensignaturen und verhindert die Übergabe roher GUIDs aus anderen Kontexten.