Teil 2 – Grenzen von klassischem MVC
Nach Teil 1 ist klar: MVC ist kein Anti-Pattern. Es ist bewährt, verständlich und stabil. Und trotzdem erleben viele Entwickler irgendwann, dass es nicht mehr sauber skaliert, sobald HTML und Rendering komplexer werden.
Merksatz
MVC bricht selten am Pattern – sondern an dem Moment, in dem Output mehr wird als „HTML rendern“.
In diesem Teil schauen wir uns die Grenzen an – nicht als Vorwurf, sondern als Grundlage: Wenn wir ein System bauen wollen, das Output konsequent kontrolliert, müssen wir wissen, wo MVC typischerweise anfängt zu rutschen.
2.1 MVC kennt keinen Output-Vertrag
Der klassische MVC-Ansatz sagt: „Die View rendert HTML.“ Aber er sagt nicht:
- wie genau dieser Output strukturiert sein muss
- wie konsistent Fehlerseiten, Statuscodes, Headers etc. sind
- wer entscheidet, was überhaupt als Output gelten darf
In vielen Projekten entsteht dann ein Problem: Output wird nicht „gebaut“, sondern entsteht.
Warum das gefährlich ist
Wenn HTML das Produkt ist, reicht „es kommt irgendwas raus“ nicht mehr aus.
2.2 Rendering wird oft zu einem Nebenschauplatz
In vielen MVC-Projekten wird Rendering als „letzter Schritt“ betrachtet:
- Controller holt Daten
- Controller wählt View
- View rendert
Das funktioniert gut – solange Rendering trivial ist. Sobald es aber um Dinge wie Layout-Strukturen, SEO-Optimierung, A11y und PageSpeed geht, wird Rendering plötzlich der teuerste Teil – und gleichzeitig am schlechtesten kontrollierte.
2.3 Controller wachsen über ihre Rolle hinaus
Der Controller ist im MVC das Bindeglied. In der Praxis wird er aber oft zu einem Sammelbecken:
- Query-Building
- Validierung
- Redirects
- Template-Entscheidungen
- Fehlerbehandlung
- Output-Details
Dadurch entsteht eine unschöne Dynamik: Der Controller wird nicht mehr Koordinator – sondern Renderer, Domain-Logic und Router in einem.
2.4 Fehlerseiten fühlen sich „anders“ an
Ein Klassiker: Fehlerseiten und Sonderfälle durchbrechen den normalen Rendering-Pfad. Plötzlich gelten andere Regeln:
- andere Templates
- andere Statuscodes
- andere Header
- andere Layouts
Das ist kein MVC-Fehler – sondern die Konsequenz, wenn Output kein zentraler Vertrag ist.
2.5 Erweiterbarkeit führt oft zu Unklarheit
Spätestens wenn Plugins, Module oder „Hooks“ ins Spiel kommen, kippt es häufig: Erweiterbarkeit wird mit „kann alles überall“ verwechselt.
Die Folge:
- Controller sind nicht mehr nachvollziehbar
- Templates werden indirekt verändert
- Routen tauchen auf, ohne dass klar ist woher
- Output ist nicht mehr stabil
Merksatz
Erweiterbarkeit ist nur dann gut, wenn sie nicht die Erklärbarkeit zerstört.
Übergang zu Teil 3
In Teil 2 haben wir gesehen: MVC ist stabil – aber es schützt Output nicht. Der nächste Schritt ist daher nicht „MVC ersetzen“, sondern verstehen, wie Output Kontrolle verliert.
Nächster Schritt
In Teil 3 schauen wir uns an, wie Controller in der Praxis immer weiter wachsen – und warum genau das zum Problem wird.
Projekt & Quellcode
Wenn du die hier beschriebenen Punkte im Code nachvollziehen möchtest, findest du das Projekt öffentlich auf GitHub:
- 👤 GitHub-Profil: github.com/MichaelKorte73
- 📦 Projekt-Repository: github.com/MichaelKorte73/CleanOutputMVC