Willkommen › Software Architecture › SOLID-Prinzipien

Software Architecture · SOLID-Prinzipien

SOLID: fünf Regeln für Code, der mitwächst.

Die SOLID-Prinzipien von Robert C. Martin sind die Grundlage für wartbare, objektorientierte Software. Wir erklären sie verständlich – und wenden sie in jedem Projekt an.

Die fünf Prinzipien

S · O · L · I · D

Single Responsibility

Eine Klasse hat genau einen Grund, sich zu ändern. Rechnung erstellen und Rechnung mailen sind zwei Aufgaben.

Open/Closed

Offen für Erweiterung, geschlossen für Änderung: Neues kommt dazu, ohne Bestehendes umzubauen.

Liskov Substitution

Eine Unterklasse muss sich überall wie ihre Oberklasse verwenden lassen – ohne Überraschungen.

Interface Segregation

Lieber mehrere kleine Schnittstellen als eine große, von der jeder nur die Hälfte braucht.

Dependency Inversion

Hänge von Abstraktionen ab, nicht von konkreten Klassen – so bleibt Code testbar und austauschbar.

Beispiel

Dependency Inversion in der Praxis.

Die Klasse Anmeldung weiß nicht, ob Mails per SMTP, über einen Newsletter-Dienst oder im Test gar nicht verschickt werden. Sie kennt nur die Schnittstelle Mailer.

Im Test übergeben wir einen Fake-Mailer – kein Mailserver nötig, Tests laufen in Millisekunden.

  • Leicht testbar
  • Dienste austauschbar
  • Weniger Seiteneffekte
TypeScript – Dependency Inversion
interface Mailer { senden(an: string, text: string): void; }
class Anmeldung {
// haengt von der Abstraktion ab, nicht von SMTP
constructor(private mailer: Mailer) {}
registrieren(email: string) {
// ... Konto anlegen ...
this.mailer.senden(email, "Willkommen bei it7days!");
}
}

Code-Review

So prüfen wir Code auf SOLID.

Sauberer Code ist kein Luxus.

1

Abhängigkeiten sichtbar machen

Welche Klasse kennt welche? Wir zeichnen die Struktur, bevor wir sie ändern.

2

Gerüche finden

Riesige Klassen, lange Parameterlisten, switch über Typen – typische Hinweise auf verletzte Prinzipien.

3

In kleinen Schritten verbessern

Mit Tests als Sicherheitsnetz refaktorieren wir schrittweise, ohne Funktionen zu brechen.

Im Detail

Woran man verletzte Prinzipien erkennt.

  • Riesige Klassen – Hinweis auf zu viele Verantwortlichkeiten (S)
  • Switch über Typen – neue Fälle erzwingen Änderungen an alter Logik (O)
  • Überraschende Unterklassen – Methoden werfen „nicht unterstützt“-Fehler (L)
  • Leere Methoden – Klassen müssen Schnittstellen erfüllen, die sie nicht brauchen (I)
  • new überall – konkrete Klassen statt Abstraktionen erschweren Tests (D)
  • Lange Parameterlisten – oft ein Zeichen für vermischte Aufgaben
  • Globale Zustände – versteckte Abhängigkeiten zwischen Programmteilen
  • Schwer testbar – wenn ein Unit-Test eine Datenbank braucht, stimmt etwas nicht
  • Schrotflinten-Änderungen – eine kleine Änderung erfordert Anpassungen in vielen Dateien
  • Kommentare als Pflaster – „Achtung, nicht anfassen!“ statt sauberem Design

Du brauchst uns, wenn …

  • … deine Klasse „Manager“ heißt und alles managt – auch das Mittagessen.
  • … du für einen Unit-Test erst die Produktionsdatenbank brauchst.
  • … in deinem Code der Kommentar „Bitte nicht anfassen, keine Ahnung warum es geht“ steht.
  • … du SOLID bisher für eine Haarspray-Marke gehalten hast.
  • … deine Interfaces 40 Methoden haben – und jede Klasse 38 davon leer lässt.

Sauberer Code ist kein Luxus.

Dein Code ist gewachsen – und unübersichtlich geworden?

Wir schauen uns deine Anwendung an und zeigen dir, wo sich Aufräumen am meisten lohnt.