Eine Einführung in Design Patterns

Avatar von Andreas Ganje

Die Kenntnis um Design Patterns (Entwurfsmuster) sollte zum Werkzeugkasten eines jeden Entwicklers gehören, dem sauberes und wirtschaftliches Arbeiten am Herzen liegt. Die meisten Entwickler kennen und setzten zumindest die gängigen Entwurfsmuster intuitiv ein. Kein Wunder, zeigen doch aktuelle Frameworks (z. B. Zend Framework) wie wunderbar durchdachte Software-Architektur basierend auf Design Patterns funktionieren kann und wie generisch die Komponenten aufgebaut werden können. Dies fördert sowohl das schnelle Verstehen, wie auch ein problemloses Erweitern von bestehenden Softwarepaketen. Auch die Wartbarkeit einer Software profitiert von diesem standardisierten Vorgehen. Das Wissen um diese Entwurfsmuster verbindet außerdem Entwickler unterschiedlicher Erfahrungsstufen und lässt sie ein Problem methodisch erkennen und es gemeinsam lösen.

Doch was ist ein Design Pattern? Ein Design Pattern beschreibt auf eine universelle Art und Weise die optimale Lösung für ein spezielles Problem. Bezeichnend für einen Design Pattern ist dessen Ungebundenheit an eine spezielle Programmiersprache. Viele der bekannten Entwurfsmuster kamen nicht über Nacht. Sie sind oft die Ergebnisse langwieriger Findungsprozesse. Wer also einen reichen Schatz an gängigen Design Patterns sein eigen nennt – und diese geübt einsetzen kann, spart nicht nur Zeit bei der Entwicklung, sondern profitiert auch von der wertvollen Erfahrung anderer Entwickler, indem er beim Implementieren von Lösungen einen bewährten und robusten Weg geht.
Zusammengefasst gilt: Design Pattern bilden die beste Grundlage für einen guten Softwareentwickler.

Soviel zur Theorie. In der Praxis werden Design Patterns oft als sehr komplexe und schwer zu verstehende Konstrukte gesehen. Gerade die bereits genannte Universalität macht es manchmal schwer allgemein formulierte Lösungsmuster mit einem konkreten Problem oder gar in Einklang mit der Einfachheit einer Sprache wie PHP zu bringen. Wo also anfangen?
Zu aller erst sollte man sich einen Überblick über die unterschiedlichen Kategorien der Entwurfsmuster verschaffen.
Zur leichteren Orientierung werden daher im Folgenden die wichtigsten Kategorien mit den jeweils zwei typischen Vertretern kurz erläutert. Dies soll den Einstieg erleichtern und aufzeigen, dass Design Pattern auf den Punkt gebracht gar nicht so kompliziert sind.

Erzeugungsmuster
Die Entwurfsmuster dieser Kategorie befassen sich mit der Erstellung von Objekten.

Singleton-Pattern
Das Singleton-Pattern sorgt dafür, dass immer nur eine Instanz einer Klasse erstellt werden kann. Wobei zu jeder Zeit eine aktuelle Version des entsprechenden Objektes global zur Verfügung steht. Dies entlastet nicht nur den Arbeitsspeicher und die CPU, sondern beugt auch Fehlern durch Redundanz vor.

Factory-Method-Pattern
Mit Hilfe dieses Patterns werden zentral einheitliche Schnittstellen definiert. Die eigentliche Erzeugung von Objekten wird auf die darunter liegende Klassen verlagert. Dieses Vorgehen erleichtert die Integration von spezialisieren Klassen und unterstützt bei der Programmierung gegen Schnittstellen.

Strukturmuster
Die Strukturmuster optimieren das Zusammenspiel von Objekten und erhöhen die Kompatibilität.

Composite-Pattern
Dieses Design Pattern fügt mehrere Objekte zusammen und ermöglicht über eine baumähnliche Struktur mit den einzelnen Elementen komfortabel zu arbeiten. Nach außen hin wirkt die Summe aller Elemente wie ein einzelnes Objekt, wodurch die Handhabung erleichtert wird.

Adapter-Pattern
Das Adapter-Pattern fungiert als eine Zwischenschicht und ermöglicht Klassen, die aufgrund unterschiedlicher Schnittstellen nicht kompatibel sind, dennoch zusammen zu arbeiten.

Verhaltensmuster
Inhaltlich befassen sich die Verhaltensmuster mit der Art und Weise der Interaktion zwischen den einzelnen Objekten.

Observer-Pattern
Ist es nötig den Zustand eines Objektes zu überwachen und auf bestimmte Status zu reagieren, ist das Observer-Pattern die richtige Wahl. Denn ändert sich der Zustand eines Objektes, werden unter Einsatz des Observer-Patterns die beobachtenden Objekte automatisch informiert.

Command-Pattern
Das Command-Pattern erlaubt es die Anfragen an ein Objekt zu kapseln und diese verkettet abzuarbeiten.

Datenschicht und Business-Logik
Wie der Name bereits sagt, behandeln die Entwurfsmuster dieser Kategorie den allgemeinen Umgang mit Daten und der Business-Logik.

Active-Record-Pattern
Das Active-Record-Pattern bildet eine einzelnen Zeile aus der Datenbank in Form eines Objektes ab. Durch das Verwenden entsprechender Objekt-Methoden, erspart sich der Entwickler auf elegante Weise den direkten Umgang mit SQL-Statements.

Registry-Pattern
Mit dem Registry-Pattern ist es möglich Daten und Objekte an einer zentralen Stelle abzulegen und einen bequemen globalen Zugriff darauf zu ermöglichen.

Präsentationsschicht
Hier werden Entwurfsmuster eingeordnet, die sich mit der Interaktion mit dem Benutzer und der Darstellung von Daten befassen.

Front-Controller-Pattern
Das Front-Controller-Pattern sorgt für die Annahme aller Anfragen und die einheitliche Verarbeitung initialer Aufgaben. Anschließend wird für die Weitergabe von speziellen Aufgaben an das zuständige Objekt gesorgt.

View-Helper-Pattern
Dieses Pattern erlaubt häufig verwendete Logik, welche der Darstellung dient, zentral abzulegen und allen Views zur Verfügung zu stellen.

In weiteren Blogbeiträgen steigen wir tiefer in das Thema ein und behandeln die wichtigsten Design Pattern im Detail.

Avatar von Andreas Ganje

Kommentare

2 Antworten zu „Eine Einführung in Design Patterns“

  1. Klasse wäre es, wenn je Pattern auch noch ein typisches praktisches Einsatzbeispiel ergänzt wäre.

  2. Avatar von Roland Wilczek
    Roland Wilczek

    Schade, dass auch in diesem Artikel Patterns so gründlich missverstanden werden, wie in vielen „Frameworks“.

    Zitat: „Ein Design Pattern beschreibt auf eine universelle Art und Weise die optimale Lösung für ein spezielles Problem“

    Das ist (auch im Sinne der GoF) ganz einfach falsch – und der Grund für die weithin anzutreffende „Patternitis“.

    Leider typisch, dass „Singleton“ mal wieder als erstes Pattern genannt wird. Fast reflexartig wird dieses Antipattern genannt, wenn das Stichwort „Pattern“ fällt. (Einen ähnlich gedankenlosen Reflex kann man beobachten, wenn man das Thema „Objektorientierung“ auf den Tisch bringt. Danach kann man Strichliste führen, wie oft das Wort „extends“ genannt wird.)

    Zend Framework in diesem Kontext als Beispiel für „wunderbar durchdachte Software-Architektur“ heranzuziehen, zeugt nebenbei von einem gerüttelt Maß robusten Enthusiasmus‘ und Begeisterung für das faktisch Existierende.

    Nicht „Design Pattern bilden die beste Grundlage für einen guten Softwareentwickler“, sondern ein grundlegendes Verständnis für die Prinzipien der Objektorientierung:
    Single Responsibility
    Separation of Concerns
    Don’t repeat yourself
    Open/Closed-Principle
    Program to interfaces
    Inversion of Control
    Wer nicht begriffen hat, was diese Prinzipien wirklich meinen, und statt dessen mit einer Patternliste in der Hand durch seinen Quelltext streicht, erreicht das Gegenteil des Gewünschten.

    In der PHP-Welt wäre eine Reihe über die OO-Prinzipien und die Sanierung existierender Software mittels bekannter Refactorings erheblich wichtiger als eine weitere Auflistung der immer gleichen Patterns.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


Für das Handling unseres Newsletters nutzen wir den Dienst HubSpot. Mehr Informationen, insbesondere auch zu Deinem Widerrufsrecht, kannst Du jederzeit unserer Datenschutzerklärung entnehmen.