Teil 16 – Components: Features werden wählbar
Nachdem klar ist, dass Routen explizit registriert werden und der Core keine Inhalte mehr kennt, stellt sich eine neue Frage:
Wo lebt eigentlich Fachlogik?
Warum Features nicht in die App gehören
Die App ist ein Orchestrator, kein Fachmodul.
Würden Features direkt in der App liegen, entstünde sofort eine neue Form von Monolith: klar strukturiert – aber schwer trennbar.
- alles ist immer aktiv
- Abhängigkeiten wachsen unbemerkt
- Teile lassen sich nicht isolieren
Die Rolle von Components in v0.2
Components sind in v0.2 die kleinste vollständige Feature-Einheit:
- sie enthalten Domain-Logik
- sie liefern eigene Routen
- sie kapseln ihre Funktionalität
Wichtig: Components sind optional.
Merksatz
Eine Component existiert nur, wenn die App sie bewusst lädt.
Ein Feature wird eingebunden
Das Einbinden einer Component ist kein versteckter Automatismus, sondern ein expliziter Schritt:
// Beispiel
$app->addComponent(new ShortenerComponent());
Ab diesem Moment:
- registriert die Component ihre Routen
- stellt sie ihre Logik bereit
- wird sie Teil des Systems
Warum das System dadurch klarer wird
Durch Components wird sichtbar:
- welche Features aktiv sind
- wo Fachlogik liegt
- was abgeschaltet werden kann
Nichts ist mehr implizit vorhanden. Alles ist eine bewusste Entscheidung.
Architektur-Effekt
Components machen Systeme erweiterbar, ohne sie unkontrollierbar zu machen.
Shortener als erste echte Component
Der URL-Shortener ist in v0.2 bewusst als erste Component umgesetzt.
Nicht, weil er komplex ist, sondern weil er vollständig ist:
- eigene Routen
- eigene Controller
- eigene Logik
Er zeigt, wie ein Feature aussehen soll, das nicht im Core steckt – und nicht in der App.
Nächster Schritt
In Teil 17 gehen wir noch einen Schritt weiter: Plugins dürfen beobachten – aber nichts besitzen.
Projekt & Quellcode
Die Component-Struktur ist im Repository vollständig nachvollziehbar. Sie zeigt, wie Features isoliert werden, ohne das System zu fragmentieren.
- 👤 GitHub-Profil: github.com/MichaelKorte73
- 📦 Projekt-Repository: github.com/MichaelKorte73/CleanOutputMVC