Michael Korte – Senior Full-Stack Developer Freelancer aus Dortmund

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.

Weitere Ausbaustufen (Admin, Checks, Tools) bauen genau auf diesen klaren Grenzen auf.