Teil 17 – Plugins: Beobachten, nicht eingreifen
Mit Components lassen sich Features gezielt ein- und ausschalten. Damit ist v0.2 jedoch noch nicht vollständig.
Denn es gibt eine zweite Art von Erweiterung, die in vielen Systemen schnell problematisch wird: Plugins.
Warum Plugins gefährlich werden können
In klassischen Systemen dürfen Plugins oft alles:
- Routen registrieren
- Controller überschreiben
- Templates manipulieren
- globale Zustände verändern
Das fühlt sich flexibel an, führt aber langfristig zu einem System, das niemand mehr vollständig versteht.
Typisches Symptom
„Deaktiviere dieses Plugin – aber nur dieses eine.“
Die bewusste Begrenzung in v0.2
v0.2 zieht eine klare Grenze:
- Plugins liefern keine Routen
- Plugins besitzen keine Domain-Logik
- Plugins rendern kein HTML
Stattdessen haben Plugins genau eine Aufgabe: beobachten und reagieren.
Hooks als kontrollierter Einstiegspunkt
Plugins greifen in v0.2 ausschließlich über definierte Hooks in den Ablauf ein.
Diese Hooks sind:
- explizit benannt
- zeitlich klar verortet
- auf Beobachtung ausgelegt
// Beispiel: Plugin reagiert auf app.ready
$hooks->addAction('app.ready', function ($app, $response, $status) {
// beobachten, loggen, messen
});
Das Plugin verändert dabei nichts am Ablauf – es erhält lediglich Informationen.
Plugins besitzen nichts
Ein zentraler Unterschied zu Components:
- Plugins haben keine eigenen Controller
- Plugins haben keine eigenen Routen
- Plugins können jederzeit entfernt werden
Sie sind vollständig optional und hinterlassen keine strukturellen Spuren.
Merksatz
Ein Plugin darf alles sehen – aber nichts besitzen.
Das erste Plugin als Beweis
In v0.2 wird bewusst ein sehr einfaches Plugin eingesetzt: ein Trace-Plugin.
Es loggt:
- wann ein Request endet
- welchen Status er hatte
- welcher Response-Typ erzeugt wurde
Nicht, um etwas zu steuern – sondern um sichtbar zu machen, dass etwas passiert ist.
Warum diese Trennung entscheidend ist
Mit dieser klaren Rollenverteilung gilt ab v0.2:
- Components liefern Funktionalität
- Plugins liefern Beobachtung
- Der Core bleibt neutral
Erweiterbarkeit entsteht dadurch nicht durch Macht, sondern durch klar begrenzte Möglichkeiten.
Zwischenfazit v0.2
Mit Logging, leerem Core, expliziten Routen, Components und Plugins ist v0.2 erreicht: Die Architektur ist nicht mehr Theorie, sondern ein benutzbares System.
Projekt & Quellcode
Das Plugin-System von Clean-Output-MVC ist bewusst klein gehalten. Genau darin liegt seine Stärke.
- 👤 GitHub-Profil: github.com/MichaelKorte73
- 📦 Projekt-Repository: github.com/MichaelKorte73/CleanOutputMVC
Weitere Ausbaustufen (Admin, Checks, Tools) bauen genau auf diesen klaren Grenzen auf.