Design Pattern: Observer/Events mit PEAR
15. August 2008
Das Events Design Pattern ist ein sehr nützliches Pattern wenn man eine Anwendung hat in der sehr viel fachliche Logik auftritt und es ständig neue Anforderungen an bestehenden Prozessen gibt.
Beispielsweise kann es sein das nach einen Login verschiedene Dinge geprüft werden müssen. Zusätzlich sollen vielleicht noch Aktionen geloggt werden.
Wenn man jedesmal den Code für den Login erweitern würde, dann hätte man innerhalb kürzester Zeit eine riesige Klasse mit schwer wartbaren Code.
Bei dem Observer Pattern gibt eine Anwendung nur bekannt das ein bestimmtes Ereignis (Event) stattgefunden hat. Andere Programmteile können sich von außen an den EventDispatcher anmelden und werden dann von diesen benachrichtigt wenn das Ereignis eintritt.
In der PHP Bibliothek PEAR gibt es dieses Pattern schon fertig programmiert: Event_Dispatcher.
1. Handler erstellen
Als Erstes benötigt man einen Handler der das Ereignis verarbeitet.
class Handler{
/**
* @param Event_Notification
*/
public function getOnlogin(Event_Notification $oEvent_Notification){
$oValueObjects_User = $oEvent_Notification->getNotificationObject();
$aInfos = $oEvent_Notification->getNotificationInfo();
// mach irgendetwas
}
}
2. Handler registrieren
Jetzt muss der Handler beim Event Dispatcher registriert werden.
require_once 'Event/Dispatcher.php'; $oEvent_Dispatcher = Event_Dispatcher::getInstance(); $oEvent_Dispatcher->addObserver(array(new Handler(),'onLogin'),'onLogin');
Der erste Parameter ist ein PHP Callback. Als dritten Parameter kann man von eingrenzen von welche Objekten dieser Event geworfen werden darf.
3. Ereignis auslösen
Jetzt muss das Ereignis noch ausgelöst werden.
require_once 'Event/Dispatcher.php'; Event_Dispatcher::getInstance()->post($this,'onLogin',$aInfo);
Im dritten Parameter kann man noch Informationen in Form eines Array übergeben.
Nutzen
Veränderung vermeiden
Der Nutzen in dem Pattern liegt darin das man die Anwendung nicht mehr nachträglich anpassen muss um Erweiterungen einzubauen.
Verantwortlichkeiten sauber trennen
Die Verantworltichkeit der Kompontenten bleibt frei von Nebensächlichkeiten. Zum Beispiel kümmert sich dann die Login Komponente nur um das Login und sonst nichts. Alles andere wird über die Events abgearbeitet.
Fazit
Ich verwende dieses Pattern sehr viel und es macht die Anwendung wartbarer und den Einbau von Erweiterungen einfacher. In anderen Sprachen wie .NET ist das Pattern bereits in die Sprache eingebaut.
Tags: design pattern, Internet, pear, PHP
Der Beitrag wurde am Freitag, den 15. August 2008 um 17:29 Uhr veröffentlicht und wurde unter PHP abgelegt. du kannst die Kommentare zu diesen Eintrag durch den RSS 2.0 Feed verfolgen. du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.