1478 Stimmen

Was ist der Unterschied zwischen MVC und MVVM?

Gibt es einen Unterschied zwischen dem Standardmuster "Model-View-Controller" und dem Model/View/ViewModel-Muster von Microsoft?

88 Stimmen

Beachten Sie, dass MVVM zwar von Microsoft geprägt wurde, aber auch viele Entwickler und Projekte außerhalb von Microsoft begonnen haben, dieses Muster zu übernehmen. Dieser Kommentar wurde Ihnen von der Abteilung "spite-the-MS-haters" zur Verfügung gestellt.

3 Stimmen

Nachdem ich lange Zeit mit MVVM gearbeitet habe, war meine erste Begegnung mit MVC frustrierend, bis ich lernte, dass ich ViewModels mit Hilfe von Bindungstechniken, die in MVVM zu finden sind, hin und her an den Browser übergeben kann. Aber wie Joel oben sagte, ist der einzige Weg, um den Zustand vom Browser zurückzubekommen, das Posten der Änderungen in einem Formular (das Name/Wert-Paare verwendet). Wenn Sie diesen Punkt nicht gut verstehen. Sie werden eine harte Zeit in MVC haben. Betrachten Sie den Controller einfach als einen Dependency Injector für die View und Sie sind bereit.

6 Stimmen

Eine solche Frage zu hochrangigen [Entwurfsmustern]. Ich würde gerne die Verwendung von Diagrammen in den Antworten vorschlagen.

9voto

eglasius Punkte 35447

MVVM fügt das Ansichtsmodell in den Mix ein. Dies ist wichtig, da es Ihnen erlaubt, eine Menge von der Bindung Ansatz von WPF zu verwenden, ohne dass alle, die UI-spezifische Stücke in Ihrem regulären Modell setzen.

Ich kann mich irren, aber ich bin nicht sicher, ob MVVM wirklich den Controller in den Mix zwingt. Ich finde das Konzept mehr im Einklang mit sein: http://martinfowler.com/eaaDev/PresentationModel.html . Ich denke, dass die Menschen wählen, um es mit MVC zu kombinieren, nicht, dass es in das Muster eingebaut ist.

4 Stimmen

MVVM ist streng genommen ein Präsentationsmodell, obwohl MVVM die bevorzugte Bezeichnung für die WPF-spezifische Umsetzung des Musters ist.

1 Stimmen

Einverstanden. Das Viewmodel in MVC "IST" der Zustandsautomat für die Ansicht. Es enthält den Datentext und verfolgt alle Informationen zum ausgewählten Element und kann die gesamte Validierungslogik über die Schnittstelle IValidatableObject enthalten. Das ViewModel hat Schnittstellen zur DB in der Modellschicht, die stark typisierte Modelle verwenden kann. MVVM in WPF IST der Controller von MVC. Aber der Controller von MVC ist viel sauberer, er ist im Wesentlichen ein Routing-Handler.

8voto

daneejela Punkte 10553

Kurz gesagt: In MVC kennt der Controller die (Controls) View, während in MVVM das ViewModel nicht weiß, wer es konsumiert. Das ViewModel stellt seine beobachtbaren Eigenschaften und Aktionen jedem zur Verfügung, der daran interessiert ist, es zu benutzen. Diese Tatsache macht das Testen einfacher, da es innerhalb des ViewModels keinen Verweis auf die Benutzeroberfläche gibt.

7voto

Nun, im Allgemeinen wird MVC in der Web-Entwicklung verwendet und MVVM ist in der WPF/Silverlight-Entwicklung am beliebtesten. Doch manchmal die Web-Architecute könnte eine Mischung aus MVC und MVVM haben.

Zum Beispiel: Sie könnten verwenden knockout.js und in diesem Fall werden Sie MVVM auf Ihrer Client-Seite haben. Und die Serverseite Ihrer MVC kann sich auch ändern. In komplexen Anwendungen verwendet niemand das reine Model. Es könnte sinnvoll sein, ein ViewModel als "Model" von MVC zu verwenden und Ihr echtes Model wird im Grunde ein Teil dieser VM sein. Dies gibt Ihnen eine zusätzliche Abstraktionsschicht.

0 Stimmen

Was in der Web-Entwicklung als "MVC" bezeichnet wird, ist nichts anderes als die Trennung von Anliegen und nicht das echte MVC, das dem Web vorausging.

6voto

Ini Punkte 401

Der Controller wird in MVVM nicht durch ein ViewModel ersetzt, denn das ViewModel hat eine ganz andere Funktionalität als ein Controller. Sie brauchen immer noch einen Controller, denn ohne einen Controller werden Ihr Model, ViewModel und View nicht viel tun... In MVVM haben Sie auch einen Controller, der Name MVVM ist einfach irreführend.

MVVMC ist meiner bescheidenen Meinung nach die richtige Bezeichnung.

Wie Sie sehen können, ist das ViewModel nur eine Ergänzung zum MVC-Muster. Es verlagert die Konvertierungslogik (z. B. Konvertierung eines Objekts in einen String) vom Controller zum ViewModel.

4voto

der Martin Punkte 51

MVVMC, oder vielleicht MVC+, scheint ein praktikabler Ansatz sowohl für die Unternehmens- als auch für die schnelle Anwendungsentwicklung zu sein. Es ist zwar schön, die Benutzeroberfläche von der Geschäfts- und Interaktionslogik zu trennen, aber das "reine" MVVM-Muster und die meisten verfügbaren Beispiele funktionieren am besten mit einzelnen Ansichten.

Ich weiß nicht, wie es bei Ihnen aussieht, aber die meisten meiner Anwendungen enthalten Seiten und mehrere (wiederverwendbare) Ansichten, so dass die ViewModels bis zu einem gewissen Grad interagieren müssen. Die Seite als Controller zu verwenden, würde den Zweck des MVVM völlig zunichte machen, so dass ein Verzicht auf einen "VM-C"-Ansatz für die zugrunde liegende Logik zu nun ja herausfordernden Konstrukten führen könnte, wenn die Anwendung reift. Selbst in VB-6 haben die meisten von uns wahrscheinlich aufgehört, Geschäftslogik in das Button-Ereignis zu kodieren, und angefangen, Befehle an einen Controller weiterzuleiten, oder? Ich habe mir vor kurzem viele neue Rahmenwerke zu diesem Thema angesehen; mein Favorit ist eindeutig der Magellan-Ansatz (bei codeplex). Viel Spaß beim Kodieren!

http://en.wikipedia.org/wiki/Model_View_ViewModel#References

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X