Guard Clauses C# | Clean Code Best Practices Tutorial

Guard Clauses in C#: Fehlerbehandlung & saubere Methoden für wartbaren .NET-Code
Morris M. | Softwareentwickler
10/2024

Best Practices: Guard Clauses für sauberen und lesbaren Code

Bei vielen Gelegenheiten im täglichen Programmieren läuft man Gefahr, die Lesbarkeit und Wartbarkeit des Codes deutlich zu verschlechtern, indem man unachtsam mit Verschachtelungen durch If-Anweisungen umgeht.

Schauen wir uns dazu ein Beispiel an:

Die folgende Methode soll eine Pizza-Bestellung anhand eines Parameter-Objekts verarbeiten. Natürlich wird die Bestellung nur verarbeitet, wenn die Parameter plausibel sind.

Parameter-Objekt:

Grund-Bestellmethode:

Soweit so gut. Aber wir wollen natürlich nur solche Eingaben verarbeiten, bei denen auch tatsächlich etwas bestellt wird.

Überprüfen wir dies also, bevor wir mit dem Backen beginnen:

Nun fällt uns jedoch auf, dass wir auch die Fahrer nicht unnötig alarmieren sollten, wenn es keine Lieferung gibt. Ebenso sollten wir kein Geld abbuchen, wenn keine Bestellung erfolgt.

Erweitern wir also unsere Abfragen für die weiteren Schritte:

Besser. Aber wenn keine Adresse vorliegt, können wir nicht liefern, und die Bestellung sollte nicht weiterverarbeitet werden.

Ebenso sollte kein Geld für Bestellungen abgebucht werden, denen kein Preis zugewiesen wurde:

Wie Sie sehen, hat die Vielzahl an Verschachtelungen unseren Code erheblich schwerer lesbar gemacht. Wir könnten dies beheben, indem wir alle Bedingungen in eine einzige Abfrage zusammenfassen, aber das würde die individuelle Behandlung von Fehlern verhindern.

Wenn wir für jeden ungültigen Parameter eine eigene Exception auslösen möchten, müssen wir die Funktion noch weiter verschachteln:

Zum Glück gibt es eine einfache Möglichkeit, die Komplexität dieser Methode drastisch zu reduzieren. Indem wir die If-Bedingungen invertieren und die Methode bei Nichterfüllen der Bedingung sofort verlassen, können wir den produktiven Code ausführen, ohne ihn zu verschachteln.

Anstatt also die Funktion bei Vorhandensein von Pizzasorten auszuführen, verlassen wir die Methode, wenn keine Pizzasorten vorhanden sind:

Schon haben wir eine Ebene der Verschachtelung vermieden.

Diese Technik können wir nun auf alle Validierungen anwenden:

Viel besser! Es wird deutlich, dass dieses Verhalten die Funktion auf natürliche Weise in zwei Hälften geteilt hat.

Die Validierung könnte nun in eine eigene Funktion ausgelagert werden, aber dies ist das Thema für einen weiteren Artikel.

Mehr zum Thema

Pfeil nach rechts (Verlinkung)
FluentValidation in Blazor: Validierungslogik mit Custom Rules und Feldern
04/2025

Blazor FluentValidation | C# Validation Best Practices

Pfeil nach rechts (Verlinkung)
Liskov Principle: Schnittstellenfehler & Sicherheitslücken vermeiden
12/2024

Solid Reihe - Liskov Substitution Principle

Pfeil nach rechts (Verlinkung)
Open/Closed Principle: Erweiterbare Software dank klarer Struktur
11/2024

Solid Reihe - Open Close Principle

Pfeil nach rechts (Verlinkung)
Clean Code in C#: Strukturierter, verständlicher und wartbarer Code
11/2024

Clean Code Prinzipien | Lesbarer C# Code Tutorial

Pfeil nach rechts (Verlinkung)

Gemeinsam Großes schaffen

Devware GmbH verpflichtet sich, Ihre Privatsphäre zu schützen. Wir benötigen Ihre Kontaktinformationen, um Sie bezüglich unserer Produkte und Dienstleistungen zu kontaktieren. Mit Klick auf Absenden geben Sie sich damit einverstanden. Weitere Informationen finden Sie unter Datenschutz.
Vielen Dank für Ihr Vertrauen.
Unser Team prüft Ihre Anfrage sorgfältig und meldet sich in der Regel innerhalb von 48 Stunden bei Ihnen zurück.
Falls es besonders eilig ist, erreichen Sie uns auch telefonisch:
+ 49 (0) 202 478 269 0.
Da ist etwas schief gegangen beim Absenden des Formulars.