Solid Reihe - Open Close Principle

Solid Reihe - Open Close Principle
11/2024
Kai P. | Solution Engineer

TL;DR

Der Artikel erklärt das Open/Closed Principle (OCP) aus der SOLID-Reihe und zeigt, wie Software durch klare Trennung von Verantwortlichkeiten erweitert statt modifiziert wird.

SOLID Reihe – Open/Closed Principle (OCP) einfach erklärt

Das Open/Closed Principle, definiert von Bertrand Meyer, besagt:

„Ein Softwareartefakt sollte erweitert, statt modifiziert werden.“

Dies ermöglicht einfache Erweiterungen, ohne umfangreiche Änderungen am bestehenden Quellcode vornehmen zu müssen.
‍

Erweitern oder ändern?

Angenommen, eine Anwendung erstellt Zusammenfassungen von Finanzdaten, die auf einer scrollbaren Internetseite mit mehreren tausend Datensätzen angezeigt werden. Positive und negative Werte werden dabei farblich in Grün bzw. Rot hervorgehoben.

Nun möchte ein Auftraggeber die Finanzdaten über einen Schwarzweißdrucker paginiert ausgeben. Negative Zahlen sollen dabei zur schnellen Erkennung in Klammern gesetzt werden.

Offenbar muss hierfür neuer Code für die Druckansicht geschrieben werden. Doch wie viel bestehender Code muss dabei angepasst werden?

Gute Softwarearchitektur zeichnet sich dadurch aus, dass möglichst wenig bestehender Code geändert wird. Idealerweise wird nichts Bestehendes modifiziert, sondern lediglich die neue Druckansicht unkompliziert als Erweiterung hinzugefügt.

Vorteile

  • Bessere Übersicht
    Änderungen und Erweiterungen sind klar strukturiert.
  • Schnellere Erweiterungen
    Modularer Code erleichtert die Integration neuer Features.
  • Weniger Fehler
    Bestehender Code bleibt unangetastet.
  • Höhere Wiederverwendbarkeit
    Komponenten können flexibel in verschiedenen Szenarien eingesetzt werden.

Umsetzung

Wie lässt sich dies realisieren? Durch die konsequente Trennung der Verantwortlichkeiten gemäß dem SRP (Single Responsibility Principle) und die Organisation der Abhängigkeiten nach dem DIP (Dependency Inversion Principle).

Mit dem SRP ergibt sich folgender Datenfluss:

‍

ALT: Diagramm zeigt Datenfluss von Finanzdaten zum Analysierer und dann zu Web- und Print-Reportern.

‍

Eine klare Trennung der Datenaufteilung, Algorithmen und Darstellung ist entscheidend. Beispielsweise analysiert ein Algorithmus die Finanzdaten, um einen Bericht zu erstellen. Erst danach werden diese Daten für Visualisierungen aufbereitet. Komponenten werden so organisiert, dass Änderungen oder Erweiterungen minimalen Aufwand erfordern.

Detaillierte Komponentendarstellung

Die Komponenten und ihre Referenzen können detailliert visualisiert werden:

‍

ALT: Architekturskizze mit Controller, Interactor, Datenbank, Darsteller und zugehörigen Datenmodellen.

‍

Die Abhängigkeiten folgen klar definierten Richtlinien: Ein Pfeil von Klasse A zu Klasse B bedeutet, dass A einen Verweis auf B implementiert, jedoch B keine Kenntnis von A hat. Beispielsweise implementiert der FinanzDatenMapper das FinanzDatenGateway, ohne umgekehrt von diesem abhängig zu sein. Dies gewährleistet unidirektionale Referenzen, wodurch Ringverweise vermieden werden.

Komprimierte Komponentendarstellung

Auch eine komprimierte Visualisierung der Komponenten ist möglich:

‍

ALT: Komponentendiagramm mit Controller, Interactor, Darstellern und Web/PDF-Ansichten.

‍

Unidirektionale Verbindungen bieten den Vorteil, dass eine Komponente A vor Änderungen in Komponente B geschützt bleibt. Zum Beispiel soll der Controller vor Änderungen im Darsteller und in der Ansicht geschützt sein.

Schutzgrade

Besonders wichtig ist der Schutz des Interactors vor Änderungen vorgelagerter Komponenten, da dieser Geschäftslogik und Datenbankzugriffe beinhaltet. Vorgelagerte Komponenten dienen hauptsächlich der peripheren Kommunikation, wie der Controller zur Darstellung und Ansicht.

‍

ALT: Architekturdiagramm mit Pfeilen zur Zentralität und Peripherie rund um Controller, Ansichten, Datenbank.

‍

Diese Schutzhierarchie definiert die Ansicht als am wenigsten schützenswert und den Interactor als am stärksten zu schützen.

Zusammenfassung

Softwarearchitektur trennt Funktionen anhand von Datenstrukturen, Algorithmen, Darstellungsformen und technischen Anforderungen. Änderungen in der Benutzeroberfläche (z. B. durch das UX-Team) dürfen die Geschäftslogik nicht beeinflussen. Komponenten höherer Schutzgrade werden systematisch vor Änderungen untergeordneter Komponenten geschützt.

Diese Prinzipien entfalten ihren Wert vor allem in langlebigem Code. Wir helfen Unternehmen dabei, ihre Legacy-Software zu modernisieren, schrittweise und im laufenden Betrieb.

‍

Kai P. | Solution Engineer
Kai P. | Solution Engineer

Software Modernisierung

Gewachsene Systeme lassen sich in Schritten erneuern statt in einer riskanten Komplettablösung. Devware macht das seit 2004 für den Mittelstand, ISO 27001 und ISO 9001 zertifiziert.
Pfeil-Icon – Mehr erfahren

Mehr zum Thema

Pfeil nach rechts (Verlinkung)
Unittests in C#
09/2026

Unittests in C#

Blauer Pfeil nach rechts (Verlinkung)
MCP-Server in C# bauen
09/2026

MCP-Server in C# bauen

Blauer Pfeil nach rechts (Verlinkung)
Mirror-Shape-Pattern für Blazor EditForm
09/2026

Mirror-Shape-Pattern für Blazor EditForm

Blauer Pfeil nach rechts (Verlinkung)
EU AI Act: was er für den Mittel­stand bedeutet
09/2026

EU AI Act: was er für den Mittel­stand bedeutet

Blauer Pfeil nach rechts (Verlinkung)