3.2 Verwendete Komponenten 

Für die Basis des Galileo-Press-Blogs werden zwei eZ Components verwendet: Url und SignalSlot. Die Url-Komponente erlaubt das Verarbeiten und Erzeugen von lesbaren (HTTP-)URLs, ohne komplizierte String-Operationen mit PHP-Bordmittel auszuführen. Bei SignalSlot handelt es sich um eine Komponente, welche die Integration verschiedener (nicht unbedingt bekannter) Teile einer Applikation ermöglicht. Das Grundkonzept der Komponente erinnert stark an das Subject-Observer-Entwurfsmuster (siehe Kasten weiter unten). Die Implementierung dieser Komponente ist der gleichnamigen Bibliothek aus dem Qt-Framework nachempfunden. [http://trolltech.com/products/qt ]
3.2.1 Url 

PHP selbst bietet bereits eine Möglichkeit, auf Daten, die in einer URL übergeben wurden, direkt zuzugreifen: Das super-globale $_GET-Array. Allerdings hat die Verwendung von GET-Parametern einige Nachteile, wenn es um die Benutzbarkeit einer Applikation geht. Zum einen sind URLs, die GET-Parameter enthalten, für nicht technisch versierte Benutzer nicht intuitiv. Gravierender ist jedoch der Nachteil, den man bei der Indexierung durch Suchmaschinen erleidet. Früher verweigerten viele Suchmaschinen die Indexierung von Seiten, deren URLs GET-Parameter erhielten, da sie davon ausgingen, solche Seiten seien zu 100 Prozent dynamisch generiert. Bis heute vergeben die meisten Suchmaschinen auf solche URLs ein schlechteres Ranking, da aufgrund der Dynamik das Wiederauffinden nicht garantiert ist.
Aus diesem Grund wird im GP-Blog statt der GET-Methode die sogenannte Path-Info als Parameter-Transporter verwendet. Die Path-Info ist eine Erweiterung der eigentlichen URL durch einen physikalisch nicht existenten Pfad, der hinter der aufzurufenden Datei eingehängt wird. PHP selbst erlaubt zwar den Zugriff auf die Path-Info eines Requests über $_SERVER[»PATH_INFO«], stellt aber keine Möglichkeiten bereit, diese Information komfortabel zu verarbeiten. Deshalb wird in der Beispielanwendung auf die Url-Komponente der eZ Components zurückgegriffen, mit der sowohl die Verarbeitung der Parameter als auch die Zusammenstellung neuer URLs erledigt wird. Zu beachten ist hierbei, dass die Komponente einen Rewrite-Mechanismus im Webserver voraussetzt, worüber Sie bereits Näheres in Abschnitt 1.3.4, »Rewriting einrichten«, erfahren haben.
3.2.2 SignalSlot 

SignalSlot verallgemeinert den Ansatz des Subject-Observer-Patterns (siehe Kasten). Die Idee der Komponente ist die Bereitstellung sogenannter Slots (zu deutsch »Schlitze«). Ein oder mehrere Objekte können an einem solchen Slot lauschen und werden benachrichtigt, sobald ein Signal eintrifft, das auf den Namen des Slots passt. Ein solches Signal kann nun von einer beliebigen Stelle der Applikation abgesetzt werden. Es ist also anderen Objekten möglich, durch Senden eines Signals die lauschenden Objekte zu benachrichtigen. Das sendende Objekt weiß hierbei nicht, ob und wenn ja, welche Objekte benachrichtigt werden. Genauso weiß ein Objekt beim Empfangen eines Signals nicht, woher das Signal gesendet wurde, außer der Sender teilt dies beim Senden explizit als Parameter mit. Ein Signal kann beliebige Parameter mit sich führen, die der entsprechende Slot verarbeiten soll. Diese Architektur erlaubt es, dass verschiedene Komponenten einer Applikation miteinander kommunizieren, ohne konkrete Kenntnis voneinander zu haben. Einsatzgebiete für diese Technik sind meist Plug-in-Schnittstellen, bei denen den einzelnen Komponenten nicht bekannt ist, welche anderen Komponenten installiert sind und welche Informationen diese benötigen.
| Das Subject-Observer-Pattern |
|
Das Subject-Observer-Pattern ist ebenfalls eines der bekannteren Entwurfsmuster beim objektorientierten Programmentwurf. Sein Zweck ist es, ein Objekt (das Subject) durch ein oder mehrere andere Objekte (die Observer) beobachten zu lassen. Beobachten bedeutet hier, dass die Observer über bestimmte Aktionen und Status-Wechsel des Subjekts benachrichtigt werden. Ein typisches Beispiel ist die Benachrichtigung eines Cache-Objekts darüber, dass sich die gespeicherten Daten geändert haben, damit dieses den entsprechenden Cache leeren kann. Die SignalSlot-Komponente stellt einen ähnlichen Mechanismus bereit. |
Im Falle des Galileo-Press-Blogs wird SignalSlot dazu eingesetzt, vom Haupt-Controller auf die einzelnen Action-Controller zu verweisen (das sogenannte Dispatching). Der Haupt-Controller extrahiert aus der aufgerufenen URL das zu sendende Signal (die Aktion) und sendet es. Er weiß dabei nicht, welcher Action-Controller die Behandlung des Signals übernimmt. Im weiteren Verlauf sendet der angesprochene Action-Controller seinerseits Signale, um verschiedene Ergebnisse auszulösen. Ein Signal startet beispielsweise die View-Komponente, ein anderes dient der Behandlung aufgetretener Fehler oder der Weiterleitung auf eine andere Aktion.




Ihre Meinung






