2009-12-11 15 views
22

Was sind die Verantwortlichkeiten von einem gegen den anderen? Welche Art von Logik sollte in einem gegen den anderen gehen? Welches erreicht Dienste und Datenbanken? Wie entscheide ich, ob mein Code in das Viewmodel oder den Controller gehen soll?Was ist der Unterschied zwischen einem ViewModel und einem Controller?

Für die Aufzeichnung verwende ich ASP MVC, aber da die Frage Architektur ist, glaube ich nicht, es spielt eine Rolle, welche Sprache oder Rahmen ich verwende. Ich bin bereit, alle MVC zu antworten

Antwort

23

Das Ansichtsmodell ein Muster verwendet, um die Präsentationslogik und den Zustand der Ansicht zu handhaben und die Steuerung ist eine der Grundlagen Teile eines MVC Rahmen, es Antwort auf eine hTTP-Anfrage und orchest alle folgenden Aktionen, bis die hTTP-Antwort

das Ansichtsmodell Muster:. More info

im Viewmodel-Muster, die Benutzeroberfläche und jede UI-Logik in eine eingekapselt sind Ansicht. Die View beobachtet ein ViewModel , das die Präsentationslogik und den Status kapselt. Das ViewModel der Reihe nach interagiert mit dem Modell und fungiert als ein Vermittler zwischen ihm und dem View.

View <-> ViewModel <-> Model 

Die Controller (kommt von der Muster-Front Controller): More Info

It " einen zentralen Einstiegspunkt bietet Anfragen für die Handhabung."

HTTP Request -> Controller -> (Model,View) 

--Plain Unterschiede: -

  • Während das Ansichtsmodell ist ein optionales Muster des Controller ist ein Muss, wenn Sie den MVC-Weg gehen.
  • Das ViewModel kapselt die Präsentationslogik und den Status ein. Der Controller orchestriert den gesamten Application Flow.
0

Modell stellt Ihre Daten und wie es manipuliert wird. So berührt Modell die DB.

Ansicht ist Ihre Benutzeroberfläche.

Controler ist der Kleber zwischen ihnen.

1

Einige Logik und Modell sollten aufgerufen werden, um einige Daten (strukturiert oder semi-strukturiert) zu generieren. Aus diesen Daten wird die zurückgegebene Seite/JSON/etc. wird typischerweise mit nur rudimentärer Gliederungslogik erstellt.

Der erste Teil (Erstellen der Daten) wird vom Controller durchgeführt (normalerweise über das Modell). Der zweite Teil - von der Ansicht. Das ViewModel ist die Datenstruktur, die zwischen Controller und Sicht übergeben wird und normalerweise nur Accessoren enthält.

2

Der Model-View-Controller (MVC) ist ein architektonisches Entwurfsmuster, das hauptsächlich dazu dient, die Geschäftslogik von der Präsentation zu trennen. Grundsätzlich möchten Sie nicht, dass Ihr Backend Ihre Vorderseite berührt. Es sieht in der Regel wie folgt aus:

alt text

Die Gründe, dies zu tun, weil durch die Back-End-Trennung und die Front, Sie nicht binden Ihre Benutzer-Schnittstelle direkt auf Ihre Daten/Arbeit. Auf diese Weise können Sie neue Schnittstellen in Ihre Geschäftslogik einfügen, ohne diese Logik zu beeinflussen. Darüber hinaus verbessert es auch die Testfreundlichkeit.

Ein einfaches Beispiel dafür, wo MVC nützlich ist - nehmen wir an, Sie haben eine Anwendung, die die Finanzen Ihres Unternehmens verwaltet. Nun, wenn Sie MVC korrekt verwenden, können Sie ein Frontend haben, das auf dem Schreibtisch eines Finanziers sitzt und ihn Transaktionen abwickeln, Finanzen verwalten usw. ABER, weil die Geschäftslogik getrennt ist, können Sie auch ein Frontend bereitstellen zum Blackberry Ihres CEOs, der ihm den gegenwärtigen Status des Geschäfts sehen lässt. Da die beiden Frontends unterschiedlich sind, können sie verschiedene Dinge tun, während sie immer noch (verschiedene Arten von) Zugriff auf die Daten haben.

EDIT:

Da Sie Ihre Frage ein wenig aktualisiert, ich werde meine Antwort aktualisieren. Es gibt keine perfekte Wissenschaft zur Trennung von MVC. Es gibt jedoch einige gute Faustregeln. Wenn Sie beispielsweise über GUI-Komponenten sprechen, handelt es sich wahrscheinlich um eine Ansicht. (Sprechen Sie über Look and Feel, Benutzerfreundlichkeit usw.) Wenn Sie über Daten und die "Geschäfts" -Seite des Hauses (Datenbanken, Logik usw.) sprechen, beziehen Sie sich wahrscheinlich auf ein Modell. Und alles, was die Interaktion zwischen den beiden steuert, ist höchstwahrscheinlich ein Controller.

Darüber hinaus sollte beachtet werden, dass, während Ansichten und Modelle typischerweise "physisch" getrennt sind, ein Controller mit einer Ansicht existieren kann, wenn es sinnvoll ist.

Sie haben Recht, wenn Sie sagen, dass das Framework (oder sogar die Sprache) für MVC keine Rolle spielt. Das Muster selbst ist sprachunabhängig und beschreibt wirklich eine Möglichkeit, Ihr System zu entwerfen.

Hoffe, dass hilft!

+0

Ich mag den Ausdruck "Sprache Agnostiker". –

+0

danke, wäre es möglich, den Unterschied zwischen View-Modell und Controller zu erweitern? – MedicineMan

1

Ich denke, es gibt einen Wert für das Lernen empfangene Lehre. Aber es ist auch wertvoll zu verstehen, wie die Lehre so geworden ist, wie sie ist.

Trygve Reenskaug wird weithin mit der Erfindung von MVC zugeschrieben. N. Alex Rupps Artikel Beyond MVC: A new look at the servelet architecture enthält eine Geschichte von MVC. In einem Abschnitt über Reenskaugs Arbeit von 1978 im Xerox Palo Alto Research Center gibt es einen Link zu seinem Artikel Thing-Model-View-Editor: an Example from a planningsystem. Dort werden die Stücke so beschrieben.

Thing

Etwas, das für den Benutzer von Interesse ist. Es könnte konkret sein, wie ein Haus oder eine integrierte Schaltung. Es könnte abstrakt sein, wie eine neue Idee oder Meinungen über ein Papier. Es könnte ein ganzer, wie ein Computer, oder ein Teil, wie ein Schaltungselement sein.

Modell

Ein Modell ist eine aktive Darstellung einer Abstraktion in Form von Daten in einer Rechen System

Ansicht

Zur irgendein gegebenes Modell Es sind eine oder mehrere Ansichten angehängt, wobei jede Ansicht eine oder mehrere bildliche Darstellungen des Modells auf dem Bildschirm und auf Papier zeigen kann. Eine Ansicht ist auch in der Lage, solche Operationen auf dem Modell auszuführen, das mit dieser Ansicht vernünftigerweise assoziiert ist .

Editor

Ein Editor ist eine Schnittstelle zwischen einem Benutzer und einem oder mehreren Ansichten. Es stellt dem Benutzer ein geeignetes Befehlssystem zur Verfügung, beispielsweise in Form von Menüs, die sich gemäß dem aktuellen Kontext dynamisch ändern können. Es liefert den Views die notwendige Koordination und Befehlsmeldungen.

Rupp identifiziert Reenskaug des Editor als -Controller oder Werkzeug.

MVC Triaden entstanden in SmallTalk-80. Das Modell war eine Abstraktion des realen Konzeptes, die Ansicht war seine visuelle Darstellung und der Controller waren die Knöpfe und Schieberegler, mit denen der Benutzer interagieren konnte (wodurch die Ansicht "kontrolliert" wurde). Alle Stücke in der Triade waren miteinander verbunden und konnten mit den anderen beiden Teilen kommunizieren, so dass keine Schichtung oder Abstraktion stattfand. Seitdem hat Reenskaug "lieber den Begriff Tool als Controller verwendet."Nach seinen Aufzeichnungen, das sind die Bedingungen er in späteren Implementierungen hat

-3

MVC steht für Model, View, Controller.

Modell = Daten (Datenbanktabellen)

View = HTML, CSS, JavaScript, etc

-Controller = Hauptlogik, ein Vertrag zwischen Modell & Ansicht.

In einfachen und greifbaren Begriffe,

MVC ermöglicht es Ihnen, Ihre Anwendungen in einer Weise, die Ihre Geschäftsdaten und Präsentationsdaten getrennt sind, zu entwickeln. Damit können Entwickler und Designer unabhängig von einer MVC-App arbeiten, ohne dass ihre Arbeit kollidiert. MVC macht Ihre App auch OOP verfügbar.

6

enter image description here

  • Das Ansichtsmodell auf der Client-Seite als auch Server-Seite sein kann. Wo immer es auch sein mag, der einzige Zweck von viewmodel ist es, die Präsentationsdaten abzuspielen.
  • In MVC-Architektur Viewmodel ist nicht obligatorisch, aber mit Out-Controller kann die Anfrage vom Client nicht verarbeitet werden.
  • Controller kann als Hauptschnittstelle zwischen Client und Server angezeigt werden, um eine Antwort vom Server zu erhalten. Es verarbeitet die Client-Anforderung, ruft Daten aus dem Repository ab und bereitet dann die Ansichtsdaten vor. Viewmodel kann als View Data Processor/Presenter visualisiert werden, also als Schnittstelle, um die View eloquenter zu verwalten.
  • Im Gesamtkontext einer Webanwendung können wir sagen, dass der Controller der Application Request-Handler ist, während Viewmodel nur der UI-Handler ist.
+1

Ich bin auf diese Frage gelandet, weil ich mich gefragt habe, was der Unterschied zwischen MVC und MVVM ist, aber wenn ich richtig bin, ist MVVM laut Ihrer Illustration eine Teilmenge von MVC. –

+0

@OgierSchelvis, nein, sie sind anders, Sie können auch MVVMC haben (eine Mischung zwischen beiden). –