Skip to content

Architektur

Für die Entwicklung einer Anwendung mit dem RHRZ Framework ist es nicht notwendig, dessen interne Funktionsweise vollkommen zu verstehen. Dennoch ist es hilfreich für das allgemeine Verständnis, sich einen Überblick über die Architektur und Abläufe zu verschaffen.

MVC-Muster

Die Hauptbestandteile einer Webanwendung sind das Datenmodell, die Präsentation (GUI) und die Programmlogik. Das Framework nutzt das Architekturmuster MVC (Model, View, Controller), um diese Komponenten voneinander zu trennen, wodurch die Übersichtlichkeit und Wartbarkeit der Projekte erhöht wird.

  • Controller enthalten Anwendungslogik für bestimmte Requests.
  • Models ermöglichen objektorientierten Zugriff auf Datenbanktabellen.
  • Views generieren HTML-Seiten für das Frontend.

Ablauf eines Requests

Die primäre Aufgabe des Frameworks ist es, HTTP-Requests zu verarbeiten und HTTP-Responses an den Client zu senden. Davon abgesehen können auch CLI-Requests verarbeitet werden.

Es folgt eine grobe Erläuterung, welche Schritte bei der Verarbeitung eines Requests durchlaufen werden. Nähere Informationen finden sich in den jeweiligen Kapiteln.

  • Jeder Request wird vom Webserver an die Datei index.php geleitet, mit Ausnahme von Requests auf tatsächlich existierende Dateien, z.B. Stylesheets im Ordner public/src.
  • In der Datei index.php wird der Autoloader von Composer eingebunden und das Framework gestartet, indem die Methode App::run() ausgeführt wird.
  • Zunächst wird ermittelt, ob es sich um einen HTTP-Request oder CLI-Request handelt. Der zuständige Kernel wird instanziiert.
  • Die im Kernel definierte Middleware wird zu einer verketteten Liste zusammengefügt und in der entsprechenden Reihenfolge ausgeführt.
  • Die Middleware ExecuteProviders führt die im Kernel angegebenen Provider aus, welche projektweit benötigte Abhängigkeiten initialisieren.
  • Im Fall eines HTTP-Requests geschieht Folgendes.
    • Die Middleware Routing ermittelt, ob in den Controllern eine Route definiert wurde, welche auf die URL des Requests zutrifft. Falls ja, wird die Routen-Middleware an die Middleware-Kette angehängt.
    • Als letzte Middleware der Kette führt ExecuteController die Controller-Methode aus, welche für die ermittelte Route zuständig ist.
  • Im Fall eines CLI-Requests geschieht Folgendes.
    • Die Middleware ParseCommand ermittelt, ob es einen Command gibt, der auf den Befehl zutrifft.
    • Als letzte Middleware der Kette führt ExecuteCommand den zuständigen Command aus.
  • Sofern die Controller-Methode oder der Command nicht durch eine Exception unterbrochen wurde, wird eine Response in umgekehrter Reihenfolge durch die Middleware-Kette an die Klasse App zurückgegeben.
  • Abschließend wird die Response an den Client gesendet.