Unterschied zwischen MVT und MVP pattern?

1 Antwort

Zunächst: Das eine Software mehrere Entwurfsmuster nutzt, schließt sich nicht aus. Dazu ein einfaches Beispiel: Ein Programm mit grafischer Oberfläche mag ein MVC benutzen, doch die grafischen Oberflächenkomponenten (z.B. ein Button) bilden für sich genommen ja auch eine Einheit (verfügen über ein Model - der Wert, man kann einen Listener, also einen Controller registrieren und es gibt natürlich eine visuelle Darstellung).

Bei Django wird spezifisch ein MTV genutzt. Es gibt eine Dreiteilung in:

  • Model (für Datenspeicherung und logische Struktur)
  • Templates (HTML, evtl. gemischt mit Code, der vom Server vor dem Verschicken des Response noch interpretiert wird)
  • View (handhabt die HTTP-Requests)

Dabei sollte man sich nicht zu sehr durch die Bezeichner verwirren lassen. Das MTV definiert ein anderes Verständnis von View und Controller, wie es üblicherweise beim MVC-Muster der Fall ist.

Normalerweise wird dem Controller die Rolle zugeordnet, zu entscheiden, welche Daten präsentiert werden und das View beschreibt das wie.

In MTV wird das etwas anders gesehen: Das View entscheidet, welche Daten präsentiert werden und kann (muss aber nicht) auch über das wie entscheiden. Es könnte die Daten als JSON-String herausgeben oder als statische HTML-Datei. Es könnte die Daten aber ebenso einfach an ein Template weiterreichen, welches dann über das Aussehen bestimmt.

Der Controller liegt bei Django fest im Framework. Wenn ein Request den Server erreicht, wird der an das Framework gegeben und dieses delegiert den wiederum an das passende View.

Nun noch zur Unterscheidung zum MVP:

Beim MVP hast du ein Presenter-Objekt, welches alle Anfragen vom View annimmt und bearbeitet. Es gibt vielleicht Daten an das Model oder sendet ein Feedback an das View (und bestimmt generell, welche Daten es darstellen soll). Die Bindung zwischen Presenter und View ist ziemlich lose, denn der Presenter kennt nur ein Interface von dem View. Aber er stellt auch die einzige Bindung für das View dar, um Daten vom Model zu erhalten. Entweder trägt der Presenter das Model dafür an das View heran, sodass sich beide miteinander verbinden können (Stichwort: Data Binding) oder der Presenter gibt Aktualisierungen jedesmal separat an das View weiter.

Ich würde dir an der Stelle noch diesen Artikel zum Lesen empfehlen. Bestenfalls suchst du dir auch einmal via Google einen Artikel / ein Tutorial, in welchem ein MVP Schritt für Schritt implementiert wird und baust das praktisch auch selbst nach. So etwas hilft oft zum Verständnis.