Was ist Model-View-Controller (MVC)?
MVC
Model-View-Controller (MVC) ist ein Architekturmuster, das eine Anwendung in drei Zuständigkeiten teilt: das Model mit Daten und Fachlogik, die View für die Darstellung und den Controller, der Eingaben entgegennimmt und beide verbindet. Ziel ist, dass sich Oberfläche und Fachlogik unabhängig voneinander ändern und testen lassen.
Spätestens wenn eine Anwendung neben der Weboberfläche auch eine Schnittstelle bekommt, zeigt sich, ob die Fachlogik jemals von der Darstellung getrennt war.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
- Drei Rollen
- Model, View, Controller
- Ursprung
- Smalltalk am Xerox PARC, Ende der 1970er
- Bekannt aus
- Rails, Laravel, Spring MVC, ASP.NET Core MVC
- Verwechselt mit
- MVVM und Schichtenarchitektur
Was jeder Teil tut
Die drei Buchstaben stehen für drei Rollen mit klaren Grenzen. Am einfachsten merkst du sie dir über die Frage, was ein Teil auf keinen Fall wissen darf.
| Teil | Zuständig für | Weiß nichts von | Beispiel |
|---|---|---|---|
| Model | Daten und fachliche Regeln | HTTP, HTML, Ausgabeformat | Eine Rechnung ohne Positionen darf nicht verschickt werden |
| View | Darstellung fertiger Werte | Datenbank und Geschäftsregeln | Template mit Blade, Twig oder Razor |
| Controller | Anfrage annehmen, Model aufrufen, Antwort wählen | Wie gerechnet und wie dargestellt wird | Aktion zeigeRechnung(17) |
Der Controller ist die dünnste Schicht. Er liest die Anfrage, prüft die Form der Eingaben, ruft eine Methode im Model oder in einem Service auf und entscheidet, welche View oder welche Weiterleitung zurückgeht. Wenn ein Controller lang wird, ist das fast immer ein Zeichen, dass Fachlogik an der falschen Stelle liegt.
So läuft eine Anfrage durch eine Web-Anwendung
In Web-Frameworks wie Laravel, Symfony, Ruby on Rails, Spring MVC oder ASP.NET Core MVC folgt jede Anfrage demselben Weg:
-
Front Controller
Eine einzige Einstiegsdatei nimmt alle Anfragen an, davor können Middleware oder Events für Anmeldung, Sprache und Protokollierung hängen.
-
Routing
Die Routing-Tabelle bildet Pfad und HTTP-Methode auf eine Controller-Aktion ab, aus /rechnungen/17 wird ein Aufruf mit dem Parameter 17.
-
Controller
Die Aktion prüft die Eingaben und ruft das Model oder einen Service auf.
-
Model
Lädt die Rechnung, wendet die fachlichen Regeln an und gibt das Ergebnis zurück.
-
View
Bekommt die fertigen Werte und erzeugt daraus HTML oder JSON, das als Antwort an den Browser geht.
Nicht jedes Framework nennt die Teile gleich. Django spricht von Model, Template und View (MTV): Dort heißt der Teil View, der in anderen Frameworks Controller wäre, und die eigentliche Darstellung übernimmt das Template. Das Prinzip ist dasselbe.
Ursprung und zwei Lesarten
MVC ist deutlich älter als das Web. Trygve Reenskaug entwickelte das Muster Ende der 1970er-Jahre am Xerox PARC für grafische Oberflächen in Smalltalk. Dort war jedes Fenster ein Paar aus View und Controller, und die View beobachtete das Model: Änderte sich ein Wert, aktualisierte sich die Anzeige von selbst.
Im Web funktioniert das so nicht, weil zwischen Browser und Server nur einzelne Anfragen und Antworten laufen. Web-MVC ist deshalb eine Abwandlung, bei der der Controller am Anfang jeder Anfrage steht und die View nur einmal gerendert wird. Wenn dir zwei MVC-Diagramme begegnen, deren Pfeile in unterschiedliche Richtungen zeigen, beschreibt das eine meist die klassische Variante, das andere die Web-Variante.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Model-View-Controller und was oft damit gleichgesetzt wird
Model-View-ViewModel stammt aus Oberflächen mit Datenbindung, etwa WPF, Angular oder Vue. Statt eines Controllers gibt es ein ViewModel, an dessen Eigenschaften die Ansicht direkt gebunden ist, und Änderungen laufen automatisch in beide Richtungen.
Bei Model-View-Presenter ist die View völlig passiv und meldet jede Eingabe an den Presenter, der sie auch wieder befüllt. Das Muster war vor allem in Desktop-Anwendungen und älteren Android-Apps verbreitet, weil sich der Presenter ohne Oberfläche testen lässt.
Die Schichtung trennt Darstellung, Fachlichkeit und Datenzugriff übereinander. MVC beschreibt vor allem die oberste Schicht genauer und sagt nichts darüber, wie du Repository und Datenbank organisierst.
Der Front Controller ist die eine Einstiegsdatei, die alle Anfragen annimmt und weiterreicht. Er gehört zum Aufbau, ist aber nicht das C in MVC, denn dieses steht für die anwendungsspezifische Aktion.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Der Controller wächst, weil er der bequemste Ort für alles ist
Am Anfang steht eine Methode, die eine Anfrage entgegennimmt. Dann kommt die Berechtigungsprüfung dazu, danach die Preisberechnung, dann der Mailversand, und irgendwann liegt die halbe Fachlogik in einer Klasse, die eigentlich nur vermitteln sollte. Erkennbar ist der Zustand daran, dass sich diese Logik ohne eine echte HTTP-Anfrage nicht mehr testen lässt.
Der zweite typische Riss verläuft zwischen View und Model. Lädt ein Template selbst Daten nach oder rechnet Beträge zusammen, hängt die Darstellung an der Fachlogik. Sobald dieselbe Auswertung zusätzlich als Schnittstelle gebraucht wird, muss alles ein zweites Mal gebaut werden, und ab da driften beide Fassungen auseinander.
Was im Alltag hilft, ist eine Schicht, die das Muster gar nicht vorsieht: ein Dienst zwischen Controller und Model, der einen Anwendungsfall abbildet. Der Controller nimmt dann die Anfrage entgegen, übergibt an den Dienst und wählt nur noch die Antwortform, und die Fachlogik bleibt an einer Stelle, die du auch ohne Web-Framework aufrufen kannst.
Model-View-Controller lernen
Wie sich das in einem echten Framework anfühlt, vom Routing bis zum Template, arbeiten die PHP-Trainings für Webprojekte an einer durchgehenden Anwendung durch.
Die Gegenseite im Browser, also Zustand und Darstellung im Frontend, behandeln die Kurse zur Webentwicklung.
Kurse, die Model-View-Controller behandeln
- Alles über Symfony: Komplettausbildung zum PHP Framework
- Laravel das PHP Framework - Der komplette Einstieg
- PHP Training: Professionelle Webanwendungen entwickeln
- PHP Aufbaukurs
Weitere Kurse aus diesem Bereich
Häufige Fragen
Ist MVC ein Entwurfsmuster oder eine Architektur?
Gehört Validierung in den Controller oder ins Model?
Braucht eine Schnittstelle mit JSON noch eine View?
Ist MVC bei einer Single-Page-Application noch relevant?
Deine Ansprechpartner
Du willst das Thema nicht nur nachschlagen, sondern anwenden können? Wir beraten dich persönlich und kostenlos.
Yves Hoppe
Weiterbildung & Beratung
Ordnet mit dir ein, welcher Kurs zu deinem Vorwissen passt.
Norbert Jansen
Beratung & Inhouse
Plant Inhouse-Trainings, die an euren eigenen Daten und Abläufen ansetzen.
Model-View-Controller im Kurs statt im Lexikon
Nachschlagen bringt dich bis zum Verstehen. Anwenden lernst du an echten Aufgaben.