Was soll das Command-Pattern?

Wenn man lernt objektorientiert zu Programmieren, bekommt man eine einfache Faustregel an die Hand: Objekte sollen die Realwelt abbilden. Zur Klassen wird alles was ein Nomen ist. Attribute legen die Eigenschaften dieser Nomen fest, sind also in der Regel die Adjektive. Und Funktionen stellen die Verben da, die eine Handlung beschreiben.

Sobald man jedoch das Verständnis für OOP erworben hat, rückt diese Regel stark in den Hintergrund. Man beschäftigt sich mit “sauberer” Programmierung und einer Trennung der Zuständigkeiten zwischen Darstellung, Daten und Logik (MVC-Architektur), sowie einer losen Kopplung zwischen diesen Programmteilen. Besonders merkwürdig kommt einem das Command-Pattern vor, ein durch die GoF beschriebenes Verhaltensmuster.

Das Command-Pattern (Befehls-Muster, Kommando-Muster) kapselt EINEN Befehl in ein Objekt. Bei der Umsetzung wird für jeden konkreten Befehl eine Klasse erstellt, die eine abstrakte Command-Klasse implementiert. Dabei wird genau eine Methode erstellt, die den Programmcode für den entsprechenden Befehl beinhaltet. Weitere Methoden und Attribute sind nicht vorgesehen. Eine Instanz dieser Klasse wird erzeugt, sobald der Befehl aufgerufen wird. Nach Beendigung wird diese Instanz wieder gelöscht.

Diese Vorgehensweise ermöglicht es Kommandos aus einem Programmteil aufzurufen, der keine Referenz zum restlichen System besitzt. Beispielsweise kann ein Ereignis, das auf der Benutzeroberfläche durch eine Benutzerinteraktion auftritt (z.B. Klick auf einen Button), ein solches Kommando aufrufen. Die Benutzeroberfläche benötigt auf diese Weise keine Information darüber, was durch den Aufruf genau passiert oder welche Objekte angespochen werden. Darüber hinaus ermöglicht das Command-Pattern, Befehle in einer Warteschlange abzulegen und seriell abzuarbeiten.

Eine gelungende Umsetzung dieses Entwurfsmuster findet man im Framework PureMVC. PureMVC ist ein leichtgewichtiges Framework auf Basis einer Model-View-Controller-Architektur, in dem unterschiedliche Entwurfsmuster zum Einsatz kommen. Es steht open-source als ActionScript 2+3 für Flash- und Flex-Anwendungen zur Verfügung. Weiterhin wird das Framework nach und nach in anderen Sprachen umgesetzt (Java, JavaScript, Ruby, Phyton, PHP, C#, …).

Im Framework PureMVC wird der Controller (also die Fachlogik der Software) vollständig über das Command-Pattern implementiert. Dabei wird in Simple-Commands und Macro-Commands unterschieden, wobei Macro-Commands in der Lage sind weitere Commands auszuführen. Die Kommunikation der Programmteile (M, V und C) wird über Notifications (also ein Nachrichtensystem, Observer-Pattern) realisiert. Auf diese Notifications kann ein Command gemappt werden. Dies bedeutet, sobald ein Programmteil eine Nachricht versendet, wird die Fachlogik des entsprechenden Command abgearbeitet. Auf diese Weise gibt es eine absolut lose Kopplung zwischen der Benutzerschnittstelle (GUI) und dem Model (Datenhaltung).

GoogleBooks - Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software (Gang of Four)

Homepage PureMVC

Add Comment!




Security Code: