Nach hinten offen… OCP für Einsteiger

Nicht selten begegnet einem in gewachsenen Projekten Quellcode wie dieser:

if (this.Known)
{
  if (this.Age >= 18)
  {
    if (this.Gender == 0)
    {
      switch (this.Status)
      {
        case Status.Married:
          result = "{0} is a known male married adult.";
          break;

Was hier passiert ist leicht beschrieben: Verschiedene Eigenschaften einer Klasse bestimmen ihr Verhalten, das in einer Form von den Eigenschaften abhängig ist, so dass ein Entscheidungsbaum scheinbar die einzige Möglichkeit ist, der Sache Herr zu werden.

Softwareentwickler kennen auch die Probleme, die daraus entstehen: Die Komplexität steigt bei gleichbleibend sinkender Wartbarkeit. Der Code lässt sich irgendwann schlicht und einfach nicht mehr überblicken. Neue Verhaltensweisen hinzuzufügen erscheint ohne vorhergehende Impact-Analyse kaum machbar und falls doch ausprobiert endet es in der Regel in einem Desaster.

Die im Titel dieses Beitrages erwähnte Abkürzung OCP beschreibt dabei die Lösung mit drei simplen Worten: Open Closed Principle. Ausgesprochen steht das für “Eine Klasse soll offen für Erweiterungen aber geschlossen gegenüber Veränderungen sein”. Das ergibt soweit Sinn und klingt nach einem erstrebenswerten Ziel.

Mehr ins Detail dazu gehen verschiedene Webseiten, darunter allen voran natürlich Wikipedia, aber auch z.B. cleancodedeveloper.de.

TOP TECHNOLOGIES Learn & Research Labs

Da die meisten Beispiele aber eher steril daherkommen und strukturell auch so einfach gehalten sind, dass jeglicher Realitätsbezug fehlt, hat die TOP TECHNOLOGIES auf codeplex ein Projekt veröffentlicht, das im ersten Anlauf genau dieses Thema aufnimmt und anhand einer Virtual Lab Dokumentation das Open Closed Principle Schritt für Schritt erläutert. Dabei wird der Leser an die Hand genommen und zunächst durch ein Negativbeispiel geführt, um dann über ein schrittweises Code-Refactoring zu einer vollständigen OCP-Lösung zu gelangen.

Der Dokumentation liegt eine komplette Visual Studio 2012 Solution bei, die als Grundlage dient und auch als Zip-Archiv von der Quellcodeverwaltung entkoppelt heruntergeladen werden kann.

Am Ende des Labs angekommen hat der Entwickler das Open Closed Principle verstanden und kennt auf Basis des sog. Strategy Patterns eine Möglichkeit, es umzusetzen. Ein wenig Experten Know How rundet das Thema noch zusätzlich ab.

Wir freuen uns auf Feedback und hoffen, dass das Thema Anklang findet! Geplant ist, das Projekt um weitere Themen zu ergänzen; gerne nehmen wir auch Vorschläge auf!

Comments are closed

Über die Autoren

Christian Jacob ist Leiter des Geschäftsbereiches Softwarearchitektur und -entwicklung und zieht als Trainer im Kontext der .NET Entwicklung sowie ALM-Themen Projekte auf links.

Marcus Jacob fokussiert sich auf die Entwicklung von Office-Addins sowie Windows Phone Apps und gilt bei uns als der Bezwinger von Windows Installer Xml.

Martin Kratsch engagiert sich für das Thema Projektmanagement mit dem Team Foundation Server und bringt mit seinen Java- und iOS-Kenntnissen Farbe in unser ansonsten von .NET geprägtes Team.

Aktuelle Kommentare

Comment RSS