IPC: Session “Decouple your PHP Code for Reusability” (Update)
Gleich meine erste Session, die ich besucht habe, war schon sehr interessant. Gehalten hat sie Fabien Potencier, seines Zeichens einer der Köpfe, wenn nicht sogar der Kopf, hinter dem Symfony Framework. Das Thema seines Vortrags war im Wesentlichen, die Abhängigkeit von Klassen in einer Anwendung zu minimieren, um die Wiederverwendbarkeit erhöhen zu können.
Wichtige Vorteile des loose coupling (zu deutsch lose Kopplung) sind die leichtere Testbarkeit des Codes, die zeitsparende, erhöhte Lesbarkeit, die bessere Wartbarkeit und Erweiterbarkeit sowie die leichtere Wiederverwendbarkeit des eigenen PHP Codes. Gerade da die Entwicklung stetig voranschreitet, ist es wichtig, dass man durch eine solide Basis auf bestehender Arbeit aufbauen kann.
Wichtigstes Hilfsmittel, um eine lose Kopplung der Komponenten zu erreichen, ist das Dependency Injection Entwurfsmuster. Zuerst demonstrierte Fabien einige Beispiele für zu hohe Kopplung von Komponenten. Bei einem Beispiel war eine User Klasse mit einer Session Storage Klasse so stark gekoppelt, dass das einfache Ändern des Namens vom Sessioncookie schon Probleme bereitet hat. Ein weiteres Beispiel stellte das Ändern der Storage Enginge für die Sessiondaten vor große Probleme. Zur Lösung wurde die Storage Engine an den Konstruktur der User Klasse übergeben. Details zu den Beispielen könnt ihr am besten den Folien von Fabien entnehmen, die in Kürze auch auf der IPC Website veröffentlicht werden sollen. Ich reiche den Link (sobald bekannt) an dieser Stelle dann nach.
Fabien unterscheidet mehrere Arten, wie man die Dependency Injection umsetzen kann. Zum einen kann man die benötigten Objekte (z.B. die Session Storage Klasse) an den Konstruktur übergeben (z.B. an die User Klasse). Oder man verwendet eine Setter Methode. Letzte Alternative ist das direkte Setzen über eine Eigenschaft der Klasse. Fabien bevorzugt den Ansatz über den Konstruktur für Objekte, die immer und sofort gebraucht werden, und den Ansatz über eine Setter-Methode für Objekte, die nur bei Bedarf benötigt werden.
Fabien brachte auch noch ein weiteres, deutlich komplexeres Beispiel für einen Bootstrapping Prozess, also für die Einrichtung einer Applikation mit Request, Response, User, Storage, Cache und Routing Objekten. Hierfür empfahl er den Einsatz eines so genannten Container Objekts, das sich um die Konfiguration und Verwendung der einzelnen Objekte kümmern soll. Dies hat den Vorteil, dass die einzelnen Objekte nicht mehr in starker Abhängigkeit bestehen.
Im weiteren Verlauf seines Vortrags gab Fabien noch einige Implementationstipps, zeigte ein Beispiel aus der realen Welt mit verschiedenen Konfigurationsdateien im XML oder INI Format und nannte einige Beispiele von Projekten, welche Container verwenden. Zu guter Letzt stellte Fabien auch das Observer Pattern vor, demonstrierte ein paar Beispiele und nannte wiederum Projekte, welche das Observer Pattern einsetzen.
Die Fragestunde fiel mangels Fragen etwas kurz aus. Doch da Fabien wie eingangs erwähnt ein kompetenter Ansprechpartner zum Symfony Framework ist, wurde er kurz gebeten zu erläutern, welche Vorteile Symfony nun gegenüber anderen Frameworks bietet. Seine nicht überraschende Kernaussage war, dass Symfony natürlich das beste PHP Projekt ist. Er konnte sich auch seine Seitenhiebe in Richtung des Zend Frameworks (natürlich alle völlig subjektiv und haltlos und überhaupt) nicht verkneifen.
Alles in allem eine interessante Session und für mich genau das richtige zum Einstieg. Man muss ja auch erst reinkommen in so eine Konferenz. Huch! Die Sonne scheint! Ich muss weg!
Update vom 4.11.2008: Fabien hat die Vortragsfolien veröffentlicht.


Dienstag, 28.10.2008, um 17:08
Ich war ja leider nur gestern. Die Session hätte mich auch sehr interessiert.
Aber nicht das du dem Zend Framework untreu wirst. ;-)
Danke für den Bericht!
Dienstag, 28.10.2008, um 18:16
Nein, die Gefahr besteht auf keinen Fall. Symfony hat halt eine Philosphie, die nicht so auf meine Bedürfnisse passt. ZF gefällt mir da besser.
Danke und Gruss,
Ralf
Donnerstag, 30.10.2008, um 16:21
[...] Zu guter Letzt empfiehlt Derick auch, die Komponenten in einer Anwendung nicht zu sehr voneinander abhängig zu machen. Dazu empfehle ich auch den Artikel über die Session “Decouple your PHP Code for Reusability“. [...]
Dienstag, 04.11.2008, um 16:45
Hast du zum Thema Container Objekte ein paar hilfreiche Links parat? Denn “Container” scheint kein geeignet Suchwort um etwas darüber bei einer Suchmaschine zu finden.
Dank & Grüße
Schaelle
Dienstag, 04.11.2008, um 18:38
Hallo Schaelle,
ich habe die Vortragsfolien eben gefunden. Vielleicht helfen die dir besser weiter:
http://www.aide-de-camp.org/talk/19/decouple-your-code-for-reusability-ipc-2008
Gruss,
Ralf