Informatik

Model-View-Controller (MVC) einfach erklärt

Model-View-Controller (MVC) einfach erklärt
Model-View-Controller (MVC) einfach erklärt
Für Quiz, Lückentext, Lernkarten und Fortschritt ist JavaScript nötig. Alle Inhalte und Lösungen bleiben direkt lesbar.

Das Model-View-Controller-Muster (MVC) trennt den Zustand einer Anwendung, seine Darstellung und die Verarbeitung von Eingaben. Dadurch lassen sich Teile der Software leichter austauschen, testen und weiterentwickeln.

Auf dieser Seite lernst du das klassische MVC und die verbreitete Webvariante kennen. Du erfährst außerdem, warum die drei Rollen in realen Projekten nicht immer gleich zugeschnitten sind.

Deine Lernziele

Hake ab, was du schon kannst — und komm am Ende hierher zurück!

Die drei Rollen trennen Verantwortlichkeiten

Stell dir eine Anwendung vor, mit der du Aufgaben verwaltest. Sie speichert Aufgabentexte und Erledigungszustände, zeigt eine Liste an und reagiert auf den Klick auf „Erledigt“. MVC verteilt diese Verantwortlichkeiten auf drei Rollen.

Definition

Model

Das Model verwaltet den darzustellenden Zustand, zum Beispiel Aufgaben und ihre Erledigungszustände. Es reagiert auf Abfragen und Änderungsaufforderungen. Je nach MVC-Variante kann es zusätzlich fachliche Logik enthalten oder weitere Fachkomponenten verwenden.

Definition

View

Die View stellt den Zustand für Menschen dar, zum Beispiel als Aufgabenliste. Sie soll sich auf die Darstellung konzentrieren und keine unnötige fachliche Logik übernehmen.

Definition

Controller

Der Controller verarbeitet Eingaben oder Requests und koordiniert die nächsten Schritte. Er kann eine Änderung am Model anstoßen und bestimmen, welche View angezeigt wird.

Beispiel

Eine lernende Person klickt bei „Referat vorbereiten“ auf „Erledigt“.

  1. Die View zeigt die Aufgabe und die Schaltfläche.
  2. Der Controller verarbeitet den Klick.
  3. Das Model ändert den Erledigungszustand.
  4. Die View zeigt danach den neuen Zustand an.

Der entscheidende Gedanke lautet: Die Darstellung speichert den fachlichen Zustand nicht selbst, und das Model entscheidet nicht über das Aussehen der Schaltfläche.

Merke

Frage bei der Zuordnung nach der Verantwortung: Zustand verwalten – darstellen – Eingaben und Ablauf steuern.

Teste dich
Frage 1 von 2LeichtWelche Komponente stellt eine Aufgabenliste auf dem Bildschirm dar?
Lösung: Die View — Die View bereitet den Zustand so auf, dass Menschen ihn sehen oder anderweitig wahrnehmen können.
Frage 2 von 2MittelEin Klick soll den Zustand einer Aufgabe ändern. Welche Zuordnung passt am besten?
Lösung: Der Controller verarbeitet den Klick und stößt eine Änderung am Model an. — Der Controller verarbeitet die Eingabe. Das Model bleibt für den Zustand verantwortlich, die View für dessen Darstellung.
Klassisches MVC aktualisiert Views über Beobachter

Im ursprünglichen MVC verarbeitet der Controller technische Benutzereingaben und übermittelt die gewünschte Änderung an das Model. Die View liest den Zustand aus dem Model und stellt ihn dar.

Damit eine View eine Änderung bemerkt, kann das Beobachter-Muster eingesetzt werden. Eine View meldet sich beim Model als Beobachter an. Nach einer Zustandsänderung benachrichtigt das Model seine registrierten Beobachter, ohne deren konkrete Darstellung kennen zu müssen.

Beispiel

Eine Anwendung zeigt denselben Aufgabenbestand als Liste und als Fortschrittsanzeige.

  1. Beide Views melden sich beim Model an.
  2. Der Controller übermittelt die Aktion „Aufgabe erledigen“.
  3. Das Model ändert den Zustand.
  4. Das Model benachrichtigt beide Views.
  5. Jede View liest den neuen Zustand und aktualisiert ihre eigene Darstellung.

So kann eine neue Darstellung hinzukommen, ohne dass das Model ihren konkreten Aufbau kennen muss.

Gut zu wissen

Im klassischen MVC können mehrere View-Controller-Paare dasselbe Model verwenden. Die Trennung bezieht sich auf Rollen und Instanzen. Sie verlangt nicht, dass für jede View eine völlig neue Controller-Klasse entwickelt wird.

Teste dich
Frage 1 von 2MittelWarum benachrichtigt das Model Beobachter, statt eine bestimmte View direkt umzubauen?
Lösung: Das Model bleibt von konkreten Darstellungen unabhängig. — Das Model meldet nur, dass sich sein Zustand geändert hat. Jede View entscheidet selbst, wie sie diesen Zustand darstellt.
Frage 2 von 2SchwerEine zweite View soll denselben Zustand als Diagramm zeigen. Welche Erweiterung nutzt die Trennung am besten?
Lösung: Die neue View beobachtet dasselbe Model und besitzt ihre eigene Darstellung. — Mehrere Views können denselben Modellzustand unterschiedlich darstellen, ohne ihn mehrfach fachlich zu verwalten.
Web-MVC folgt dem Request-Response-Ablauf

Bei einer serverseitigen Webanwendung beginnt der Ablauf meist mit einem HTTP-Request, also einer Anfrage des Browsers. Der Controller verarbeitet die Anfrage, arbeitet mit dem Model oder weiteren Fachkomponenten und wählt eine View. Die View erzeugt die Darstellung für die HTTP-Response.

Beispiel

Eine Person öffnet die Adresse einer bestimmten Aufgabe.

  1. Der Browser sendet einen Request.
  2. Das Routing leitet ihn an den passenden Controller weiter.
  3. Der Controller lässt die Aufgabe über das Model oder einen Service laden.
  4. Er übergibt die benötigten Daten an eine View.
  5. Die View erzeugt die Antwortseite.
  6. Der Browser stellt die Response dar.

Kurzform: Request → Controller → Model oder Service → View → Response.

Der Webcontroller übernimmt damit häufig mehr als der ursprüngliche Eingabe-Controller aus Smalltalk. Er kann Requests auswerten, Aktionen auswählen, Validierung koordinieren und die nächste View bestimmen.

Formulare nach erfolgreichem Speichern umleiten

Nach einer erfolgreichen Änderung wird häufig ein Redirect, also eine Umleitung, gesendet. Der Browser ruft daraufhin die Zielseite mit einem neuen Request ab. Das verhindert, dass ein erneutes Laden die vorherige Schreibanfrage versehentlich wiederholt.

Beispiel

Gültige Eingabe:

  1. Der Controller lässt die Eingabe prüfen.
  2. Das Model speichert die Änderung.
  3. Der Controller antwortet mit einem Redirect.
  4. Der Browser sendet einen neuen Lese-Request.
  5. Controller, Model und View erzeugen die aktuelle Seite.

Ungültige Eingabe:

Es wird nicht gespeichert und normalerweise nicht umgeleitet. Die View zeigt das Formular unmittelbar mit den bisherigen Eingaben und verständlichen Fehlermeldungen erneut an.

Teste dich
Frage 1 von 2LeichtWelche Reihenfolge beschreibt typisches serverseitiges Web-MVC?
Lösung: Request → Controller → Model oder Service → View → Response — Der Controller koordiniert die Anfrage, greift auf Zustand oder Fachfunktionen zu und wählt die Darstellung der Antwort.
Frage 2 von 2MittelWarum ist nach erfolgreichem Speichern ein Redirect sinnvoll?
Lösung: Ein Reload wiederholt nicht einfach dieselbe Schreibanfrage. — Die Umleitung trennt die Schreibanfrage vom anschließenden Lesen der aktualisierten Seite.
MVC ist keine eindeutige Gesamtarchitektur

MVC benennt drei Verantwortungsbereiche, legt aber nicht jede Einzelentscheidung fest. Vor allem die Begriffe Model und Controller werden in verschiedenen Varianten unterschiedlich weit verwendet.

FrageEnge klassische SichtVerbreitete Websicht
Was ist das Model?Darstellbarer und veränderbarer ZustandHäufig Daten plus Teile der Domänenlogik
Was macht der Controller?Verarbeitet technische EingabenVerarbeitet Requests und koordiniert Abläufe
Wie wird die View aktualisiert?Häufig durch Beobachter-BenachrichtigungMeist durch eine neu erzeugte Response
Definition

Domänenlogik

Domänenlogik sind die fachlichen Regeln eines Anwendungsgebiets, zum Beispiel die Regel, dass eine ausgeliehene Sache nicht gleichzeitig erneut ausgeliehen werden kann.

MVC schreibt nicht allgemeingültig vor, wo sämtliche Domänenlogik, Validierung, Formatierung oder Persistenz liegen muss. Frameworks und Projektentscheidungen präzisieren diese Aufteilung. In modernen Webprojekten bleiben Controller oft bewusst schlank und übergeben Facharbeit an Services oder Domänenmodelle.

MVC und Schichtenarchitektur unterscheiden

MVC ist nicht automatisch eine Drei-Schichten-Architektur.

  • MVC trennt vor allem Zustand beziehungsweise Model, Darstellung und Interaktionssteuerung.
  • Eine typische Schichtenarchitektur trennt Präsentation, Geschäftslogik und Datenzugriff.

Beide Strukturen können gemeinsam vorkommen. Ein MVC-Controller und eine View können beispielsweise zur Präsentationsschicht gehören, während das MVC-Model weitere Geschäfts- und Datenzugriffskomponenten verwendet.

Merke

„Model“ bedeutet nicht automatisch „die gesamte Geschäftslogik und Datenbank“. Prüfe immer, welche MVC-Variante und welche Systemebene gemeint sind.

Teste dich
Frage 1 von 2MittelEine Klasse speichert Datensätze in einer Datenbank. Ist sie allein deshalb sicher das MVC-Model?
Lösung: Nein, Persistenz und MVC-Rolle sind begrifflich nicht dasselbe. — Dieselbe Klasse kann mehrere Rollen übernehmen, doch aus einer Persistenzaufgabe folgt nicht automatisch die MVC-Rolle.
Frage 2 von 2SchwerWarum können zwei Architekturdiagramme beide „MVC“ heißen und trotzdem unterschiedliche Controller zeigen?
Lösung: MVC-Varianten und Systemebenen schneiden die Rollen unterschiedlich zu. — Vergleiche nicht nur Klassennamen. Untersuche, wer Zustand verwaltet, darstellt und Eingaben oder Requests koordiniert.
Eine Architektur begründet zuordnen

Betrachte ein webbasiertes Ausleihsystem. Eine Person sendet ein Formular ab, um ein Gerät auszuleihen. Das System muss prüfen, ob das Gerät verfügbar ist, den Zustand ändern und anschließend die aktualisierte Geräteseite anzeigen.

Dein Architekturvorschlag

Ordne diese Aufgaben begründet zu:

  • Formulardaten entgegennehmen
  • Verfügbarkeit fachlich prüfen
  • Ausleihzustand speichern
  • Geräteseite darstellen
  • nach erfolgreichem Speichern umleiten
  • bei einem Fehler das Formular mit Eingaben und Fehlermeldung anzeigen

Überlege bei jeder Aufgabe zuerst: Geht es um Darstellung, fachlichen Zustand oder Ablaufsteuerung?

Musterlösung

Beispiel
  • Der Controller nimmt die Formulardaten entgegen und koordiniert die Verarbeitung.
  • Das Model oder eine vom Model verwendete Fachkomponente prüft die Verfügbarkeit. Die Regel betrifft den fachlichen Zustand und gehört nicht in die View.
  • Das Model beziehungsweise eine zugehörige Persistenzkomponente speichert den neuen Ausleihzustand.
  • Die View stellt die Geräteseite dar.
  • Nach erfolgreichem Speichern veranlasst der Controller den Redirect.
  • Bei einem Fehler wählt der Controller erneut die Formular-View und übergibt ihr Eingaben sowie Fehlermeldungen. Die View stellt beides dar.

Je nach Projekt kann die genaue Klassenaufteilung abweichen. Entscheidend ist, dass die fachliche Regel nicht in der Darstellung versteckt wird und der Controller nicht unnötig die gesamte Fachlogik übernimmt.

Teste dich
Frage 1 von 1SchwerEin Team legt Verfügbarkeitsprüfung, Datenbankzugriff, HTML-Erzeugung und Navigation vollständig in eine Controller-Methode. Welches Problem ist am wahrscheinlichsten?
Lösung: Der Controller sammelt zu viele Verantwortlichkeiten und wird schwerer testbar und wartbar. — Eine sinnvolle Trennung hält Darstellung, fachliche Regeln, Zustand und Koordination so auseinander, dass Änderungen lokal nachvollziehbar bleiben.
Karteikasten
Karteikasten

Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.

Alles auf einen Blick
Mindmap
  • Model-View-Controller
    • Model: Zustand und fachliche Änderungen
    • View: Darstellung
    • Controller: Eingaben und Koordination
    • Klassisch: Beobachter aktualisieren Views
    • Web: Request und Response
    • Grenze: keine vollständige Schichtenarchitektur
    • Nutzen: Austauschbarkeit, Testbarkeit und Wartbarkeit
Abschluss-Check

Prüfe jetzt, ob du die Rollen nicht nur benennen, sondern auch in neuen Situationen begründet anwenden kannst.

Teste dich
Frage 1 von 4LeichtWelche Aussage beschreibt die View korrekt?
Lösung: Sie stellt den relevanten Zustand dar. — Die View ist für die Darstellung verantwortlich; sie kann Eingaben sichtbar machen, soll aber den fachlichen Zustand nicht allein verwalten.
Frage 2 von 4MittelEine View soll nach jeder Modeländerung automatisch reagieren. Welches Prinzip passt zum klassischen MVC?
Lösung: Die View registriert sich als Beobachter beim Model. — Über eine Beobachter-Benachrichtigung erfahren Views von Änderungen und lesen anschließend den aktuellen Zustand.
Frage 3 von 4MittelWas geschieht bei einem typischen Webformular nach ungültiger Eingabe?
Lösung: Die View wird mit den Eingaben und Fehlermeldungen erneut dargestellt. — Ohne erfolgreiche Speicherung ist normalerweise kein Redirect nötig. Die Person soll ihre Eingaben sehen und gezielt verbessern können.
Frage 4 von 4SchwerIn einem Projekt heißt eine Klasse OrderModel. Wie stellst du fest, ob sie sinnvoll als MVC-Model arbeitet?
Lösung: Ich prüfe ihre tatsächliche Verantwortung und ihre Zusammenarbeit mit View und Controller. — MVC wird über Verantwortlichkeiten verständlich: Zustand, Darstellung und Steuerung müssen im konkreten System betrachtet werden.

Du beherrschst den Kern, wenn du bei einer unbekannten Anwendung erklären kannst, wer den Zustand verwaltet, wer ihn darstellt und wer Eingaben oder Requests koordiniert – und wenn du begründen kannst, warum die genaue Klassenaufteilung je nach MVC-Variante abweichen darf.

Passend dazu