Biphrost: Überblick
Dieser Artikel soll einen kurzen Überblick über die wesentlichsten Aspekte von Bifrost liefern. Es handelt sich dabei um folgende Themen:
- Ordnerstruktur
- Komponenten
- Abarbeitung von Anfragen
Nach dem Entpacken des Bifrost-Archivs erscheint folgende Ordnerstruktur:
- application: Sammelordner für eine bestimmte Applikation.
- application/code: Code für die Applikation und Bibliotheken sind Inhalt dieses Ordners.
- application/entrances: Definiert die Einstiegspunkte (siehe: Einstiegspunkte in Webapplikationen).
- application/templates: Enthält PHP-Templates, die PHP- und (X)HTML-Code mischen.
- classes: Für Bifrost-Applikationen notwendige Klassen.
- www: Nach außen sichtbarer Ordner, weshalb nur die Bootstrap- sowie eine .htaccess-Datei enthalten sind.
Als Konsequenz der Benutzung von Einstiegspunkten benötigt Bifrost mod_rewrite,
auch wenn Workarounds ohne mod_rewrite denkbar sind. Da Apache die
Standardkombination mit PHP darstellt, wird eine .htaccess-Datei
mitgeliefert, die mod_rewrite in der Art konfiguriert, dass Bifrost
sofort lauffähig ist.
Bifrost besteht aus lediglich vier Komponenten:
- Application: Bereitet ein Transfer-Objekt vor und nach.
- Dispatcher: Fertigt eine Anfrage an einen bestimmten URI ab.
- Template: Bietet Basisfunktionalitäten von PHP-Templates.
- Transfer: Notwendig zur Verwaltung der Daten zwischen den einzelnen Subsystemen (Außenwelt, Bifrost-Kern, Applikation).
In den weiterführenden Artikeln werden die Komponenten und die getroffenen Entwurfsentscheidungen näher erläutert:
Um eine schnelle Einarbeitung in Bifrost zu garantieren, ist ein
übersichtlicher Prozess zum Abarbeiten einer Anfrage von außen
notwendig, die sich in wenigen Schritten skizzieren lässt. Zuerst
allerdings eine kleine Analogie.
Es handelt sich dabei um das Herstellen von verschiedensten Produkten
nach Wunsch des Kunden. Der Kunde kann dabei Aufträge für bestimmte
Produkte (z.B.: Spielzeugauto) stellen, die er mit verschiedenen
Hinweisen versieht (Bsp.: Das Produkt soll rot sein.). Wenn ein Auftrag
vom Hersteller akzeptiert wird, werden etwaige Hinweise hinzugefügt
(Bsp.: Nutze Material von X, da es derzeit am günstigsten ist).
Anschließend wird nach der Maschine gesucht, die das angeforderte
Produkt herstellen kann und wenn sie gefunden wurde, wird das Produkt
hergestellt. Als letzter Schritt vor dem Abliefern des Pakets wird das
Produkt eingepackt und vielleicht wird eine Weihnachtskarte beigefügt.
Im Prinzip verfährt Bifrost genauso, nur dass die Begriffe ausgetauscht werden:
- Produkt <=> URI
- Hinweise vom Kunden <=> Außenweltdaten (GET/POST/COOKIE/SESSION/SERVER)
- Hinweise vom Hersteller <=> Application::initialize()
- Maschine <=> Einstiegspunkt
- Einpacken des Produkts <=> Application::shutdown()
Die technische Abfolge des Prozesses sollte mit dem Wissen obiger Analogie einfach verständlich sein:
- Eine Anfrage von der Außenwelt erreicht die Bootstrap-Datei (hier: www/index.php).
- Ein Transfer-Objekt wird zusammengestellt, das die Daten der Außenwelt enthält ($_SESSION, $_COOKIE, $_POST, $_GET, $_SERVER).
- Das Transfer-Objekt wird der Applikation übergeben.
- Die Applikation bereitet das Transfer-Objekt vor (Bsp.: zur Datenbank verbinden).
- Der Dispatcher sucht nach dem Einstiegspunkt zum Anfrage-URI (vgl. REQUEST_URI) und fügt ggf. unbenannte Argumente zum Transfer-Objekt hinzu.
- Der Einstiegspunkt wird mit dem aktuellen Transfer-Objekt aufgerufen (Bsp.: Anzeigen eines Artikels).
- Das aktualisierte Transfer-Objekt wird nachbereitet durch die Applikation (Bsp.: Darstellen des Layouts).
- Änderungen an der Außenwelt (hier: $_SESSION) werden über das aktualisierte Transfer-Objekt vorgenommen.
Details zu den einzelnen Prozessen finden sich in der näheren Erläuterung der einzelnen Komponenten.