MVVM ViewModel im Vergleich zu MVC ViewModel
ViewModel ist ein Begriff, der verwendet wird, in beiden MVVM (Model-View-ViewModel) und die empfohlene Umsetzung für ASP.NET MVC. Forscht "ViewModel" kann verwirrend sein, da jedes Muster verwendet den gleichen Begriff.
Was sind die wichtigsten Unterschiede zwischen den MVC-ViewModel und MVVM ViewModel? Zum Beispiel, ich glaube das MVVM ViewModel mehr reichen, da der Mangel an einem Controller. Ist das wahr?
InformationsquelleAutor der Frage Neil Barnwell | 2009-12-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem ziemlich schwierigen Frage zu beantworten, kurz und bündig, aber ich werde es versuchen. (Beachten Sie, dass die Antworten auf diese Fragen sind noch Gegenstand der Diskussion unter Entwicklern.)
In MVC, das ViewModel liefert alle notwendigen Informationen für eine View gerendert werden. Die Daten, die es enthält, wird erstellt unter Verwendung von Daten, die im Modell definiert. Die Ansicht, liest das ViewModel und macht die Ausgabe. Input von der View an den Controller, der manipuliert das Modell, erstellt eine entsprechende ViewModel, und übergibt diese an die View für das rendering.
In MVVM das ViewModel dient der gleichen Funktion wie in MVC, aber es ersetzt auch Teil des MVC-Controller, indem Befehle, die es erlauben die Ansicht zum Bearbeiten des Modells. WPF databinding verwaltet, die Aktualisierung der Ansicht nach änderungen im ViewModel (und diese effektiv ersetzt, die Verbleibende Funktion des MVC-Controller).
InformationsquelleAutor der Antwort Adam Ralph
Es ist schon eine Weile her, seit ich gespielt UI-Design-Pattern Bingo.. aber lassen Sie mich einen Stich an diese..
MVVM ist nur etwas, das MS hat mit zu kommen... da es Ihnen hilft, das beste aus der WPF. Kombinieren Sie den Zustand und das Verhalten der Ansicht in class (eine Präsentation Modell) , ist leicht prüfbar + dann verwenden Sie Datenbindung, um die Daten in jeder Ansicht.
Diese link hat eine Zusammenfassung der Entwicklung von MVVM. Kombinieren Sie dies mit Fowler ' s " GUI-Architekturen " - Serie, und Sie sollten auf dem Weg sein.
Update: Wusste nicht, es war so etwas MVC-VM. Scheinbar eine Idee von der ASP.NET MVC-Menge. Sieht aus und klingt ähnlich wie MVVM (außer abgestimmt für ASP.NET MVC); der einzige Unterschied ist, dass es Orte, die eine Einschränkung, dass es 1:1-Zuordnung zwischen VM und Anzeigen. Ich würde erraten haben 1:N, aber alles andere passt.
InformationsquelleAutor der Antwort Gishu
Ich weiß, das ist eine (Weise) alte Frage, aber ich habe schon darauf hingewiesen, es als ein Beispiel der Verwendung von "View-Model" im Kontext von MVC. Ich behaupte, dass dies falsch ist und zu Verwirrung führen kann, die von Menschen, die entweder/oder/sowohl-Muster. Wer wird es tun-stahp. Hier ist, warum (und es ist auch eine Antwort auf die ursprüngliche Frage in einem Kreisverkehr Weg).
Ein Beispiel, wenn dies geschieht, kann man in diese Frage. Der Benutzer versucht, eine Ansicht Modell, die INotifyPropertyChanged implementiert, die in einer ASP.NET MVC-Anwendung, so Maischen zusammen die desktop-und stateless web application design im architektonischen scheitern und Herzschmerz.
Um es einfach auszudrücken, es ist keine "Ansicht " Modell" in MVC-Muster. Es ist, jedoch ein funktionales äquivalent, und das ist der Controller. Nur klar zu sein über die Teile und Ihre purpouses,
MVVM (desktop-Anwendungen):
MVC (web-Anwendungen):
Das Modell ist praktisch die gleiche in beiden mustern. Desktop-Modelle zu implementieren, die update-Ereignis-Benachrichtigungen, web-Modelle können dynamisch sein (also, nicht stark typisiert), und beide können oder möglicherweise nicht enthalten die Validierung von Methoden oder Metadaten.
Die Ansicht in den desktop ist das, was der Benutzer sieht. Im web, es ist ein generator, der die Ausgänge von HTML für die Browser-Anzeige auf der client-Seite. Es müssen interpret Benutzer-Interaktion auf dem desktop, aber auf der web, die verarbeitet wird, durch client-side javascript, browser und die Anfragen zurück an den server gesendet.
Die View-Modell - /Controller - sind etwa funktional äquivalent, aber unterscheiden sich sehr stark darin, wie Sie implementiert sind und wie Sie funktionieren. In der Ansicht Modell, die Interaktion der Nutzer mit der Anwendung übertragen Anzeigen von Modellen über ICommands, routed events und andere Methoden (viele MVVM-frameworks bieten verschiedene Möglichkeiten zum einbinden Modelle Anzeigen, um die Benutzeroberfläche und andere Teile der Anwendung). In einem Controller, eine Anforderung mit allen erforderlichen Informationen für die Steuerung zur Rückgabe eines Ergebnisses an den Benutzer (vorausgesetzt, es ist eine 200 OK-request). Der Controller ausführen muss, was Arbeit ist notwendig, um den Staat (aka Modell) benötigt für den HTML-generator (der Blick) die Antwort zu erzeugen. Design-Weise, die Steuerung sitzt oben die Aussicht und das Modell zu wissen und controlling, in der Erwägung, dass die ViewModel-sitzt neben der Blick, vorbei an dem Modell (und andere Informationen) zwischen Ihnen.
Was wirklich scheint, zu verwechseln einige Leute ist, dass es clientseitiges MVVM-frameworks , können Sie mischen in Ihre MVC-Anwendung. Diese existieren ausschließlich in javascript im browser des Benutzers, und haben nichts zu tun mit dem, was einem bestimmten Muster, dem du folgst, auf der server-Seite. Sie können einen klassischen ASP-website, die verwendet MVVM auf der client-Seite. Die Hölle, die Sie ausführen können statische HTML-Seiten, die Verwendung von MVVM auf der client-Seite. Sie sind, getrennt.
Diese javascript MVVM-frameworks in der Regel Folgen einem ähnlichen Muster auf die desktop-MVVM-Muster oben beschrieben, aber angepasst, um die Arbeit mehr in Einklang mit der Natur von HTML-DOM und javascript. Zum Beispiel gibt es keine umfassenden verbindlichen system verwoben in den DOM, und javascript hat eine sehr begrenzte Art system, also den entsprechenden Vorlagen zu den Modellen sehr viel anders als in WPF. Sie können in der Regel auch die Arbeit vom server getrennt, und wenn Sie brauchen, um zu interagieren, lieber AJAX-calls eher als POSTing die Seite zurück an den Controller (AJAX-Aufrufe sind in der Regel behandelt durch die WebAPI Controller in ASP.NET MVC).
Also, um es zusammenzufassen, es ist wirklich nicht eine View-Model in MVC. Der Controller ist die grobe Entsprechung, ist aber sehr unterschiedlich, wie es empfängt Benutzereingaben, wertet Sie aus und liefert ein Ergebnis an den Benutzer. Mit dem Begriff "View-Model" beziehen sich auf alles, was in MVC kann nur zu Verwirrung führen und sollte daher vermieden werden. Verwenden Sie die richtigen Begriffe für die richtigen Teile des Musters. Es mag kleinlich, aber es sollte helfen, die Dinge klarer und weniger verwirrend für Leute, die neu sind, um beide Muster.
InformationsquelleAutor der Antwort Will