Welche Rolle spielt MVVM spielen ASP.NET MVC 4 web-Anwendungen?
Während ich die Lektüre des Buches "ASP.NET MVC 4" ich wundere mich über MVVM. Ich begann zu googeln und finde keine Bücher über die Entwicklung von web-Anwendungen mit MVVM, also ich muss fehlt etwas an Informationen zu finden.
Aus, was ich verstehe, MVVM verwendet wird, in web-Applikationen auf der client-Seite via knockout.js und anderen frameworks.
Wenn ich jedoch war die Entwicklung einer Windows Phone-Anwendung, die ich verwenden könnte, MVVM direkt ohne Verwendung von MVC.
Bedeutet das, das Konzept von MVVM /Datenbindung funktioniert einfach nicht für client-server-web-Anwendungen?
Sie könnten auch betrachten wollte, Winkel-framework von google, ist es besser, dann ko
InformationsquelleAutor Krumelur | 2013-05-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
MVVM ist wirklich irgendwie ein Teilmuster. Es gibt wirklich keine "MVVM" web-app-frameworks gibt. Sie sind alle MVC und Sie ziemlich genau sind, enthalten eine Ansicht des Modells, wenn Sie wollen.
Mit ASP.NET MVC, insbesondere, erstellen Sie einfach eine Klasse, in der Regel mit einem Namen in der form von
[Model Name]ViewModel
oder[Model Name]VM
. Diese Klasse hat nur die Eigenschaften aus dem Modell, dass Sie brauchen, um mit zu arbeiten und nichts extra, das macht keinen Sinn, um auf Ihre eigentlichen Datenbank-backed-Modell, wieSelectList
s, etc.In Ihre Aktion, die Sie gerade übergeben Sie eine Instanz dieser Ansicht Modell, um Ihre Ansicht anstelle des Modells:
Und, natürlich, stellen Sie sicher, dass die Ansicht akzeptiert, dass:
Nur leicht komplizierte Teil ist die Verdrahtung die Ansicht Modell, um das Modell (d.h., um Daten zu/aus der Sicht Modell/model. Sie können dies manuell tun, indem Sie explizit mapping-Eigenschaften verwenden, oder Sie können so etwas wie AutoMapper.
Sorry, ich hätte mehr spezifisch. Ich meinte mit web-Applikations-frameworks. Ich bin mir nicht bewusst, irgendeine Reine MVVM-web-stacks.
InformationsquelleAutor Chris Pratt
MVC ist ein one-way-data-binding-system.
Füllen Sie Ihre Model in Controller, dann übergeben Sie es an View.
MVVM ist ein zwei-Wege-Datenbindung.
Füllen Sie Ihre Model, verwenden Sie es in View, wenn die View Staates verändert sich, deine Model update automatisch.(Vice-versa)
InformationsquelleAutor ahmet
MVVM ist der standard-design-pattern für WPF - /Silverlight-Entwicklung, und sollte nicht verwechselt werden mit MVC für ASP.Net Entwicklung.
Den beiden mag ähnlich klingen, und einige gemeinsame Teile, aber Sie sind zwei verschiedene design-Muster.
Von dem, was ich gelernt über knockout.js es war entworfen, um zu erstellen "data bindings" ähnlich dem, was würden Sie in WPF - /Silverlight-Entwicklung, das ist der Grund, warum das MVVM design pattern gilt es.
Zitat aus einem anderen Antwort von mir bezüglich der Unterschiede zwischen MVVM und MVC
"Applikations-Logik ist in der Regel gefunden in ViewModels, die als Teil des M in MVC" Wie ist das so ? Das M in MVC enthält nur die Modelle (in der Regel POCO-Klassen) , ich denke, die Logik im controller? korrigieren Sie mich, wenn ich falsch bin.
Vielleicht Dinge haben sich geändert, aber vor ein paar Jahren, wenn ich war durch MVC-tutorials und Blick auf MVC-Vorlagen in VS, ich glaube mich zu erinnern Klassen namens "ViewModel" in den Ordner Modelle. Sie waren nicht eigentlich ViewModels in dem gleichen Sinn, wie MVVM ViewModels obwohl. Beide Objekte die Daten für die Ansicht, aber MVVM ViewModels Häufig tun viel von der Arbeit, die gefunden wird in einem MVC-Controller.
InformationsquelleAutor Rachel
Nein, Sie kann gelten die MVVM-pattern, client-server-web-Anwendungen.
In der Tat Asp.Net MVC eigentlich macht die Verwendung dieses Muster - wenn der controller erzeugt die view, kann es passieren in eine "view-model". Diese Ansicht-Modell ist oft ein POCO-Daten-Objekt mit allen Daten, die eine bestimmte Ansicht benötigt, gezeichnet von dem Modell (Datenbank). Die Ansicht verwendet diese Daten zum Rendern der html-Seite.
MVVM auf wikipedia sagt es wurde von Microsoft mit WPF. Insbesondere die Ansicht, bindet Sie auf die Ansicht-Modell. Das view-Modell ordnet dann diese in die Datenbank. Nach dieser definition dann, Asp.Net nicht exakt übereinstimmt. Client-side frameworks wie knockout.js und vue.js unterstützen diese Art von 2-Wege-Bindung mit view-Modell-Eigenschaften.
Alle diese Muster basieren auf den fantastischen MV* - pattern. War es ursprünglich als das MVC design pattern. Das ist also die exakt gleiche Muster wie Asp.Net MVC dann? Eigentlich nicht ganz. Controller bedeutet etwas ganz anderes zu starten (siehe MVC auf wikipedia). Das ursprüngliche MVC-controller verarbeitet alle Benutzereingaben direkt, nicht über die anzeigen. Zweitens, das ursprüngliche MVC-Muster wurde speziell für die desktop-app-GUI und Asp.Net MVC angepasst, das Muster für die Verwendung in einem client-server-web-app. Ein ASP.Net controller ist eine Sammlung von http-end-Punkte, die die client-Seite html-Seite schlagen kann (z.B. form -, post -, Seiten-navigation, ajax).
Also es gibt eine Menge von M-etwas-V-Muster und die Allgemeinen Muster wird oft als das MVC design pattern.
Gibt es eine weitere wichtige Falten: client-seitige vs. server-Seite. Wir haben eingeführt, rich-client-side javascript-frameworks und die fantastische MV* pattern ist toll hier zu. So, jetzt könnten wir so etwas wie: client-side-View-Modell-ServerHTTPEndPoints und server-Seite ServerHTTPEndPoints-Servermodell. Die server-Endpunkte bezieht sich auf Asp.Net Controller oder den Gegenwert in was auch immer web-framework oder eine Programmiersprache, die Sie verwenden. Von der Serverseite aus Sicht der client-Seite html ist die Sicht. Die client-side-Modell spricht den server ajax-api (http-Endpunkte) zum synchronisieren von Daten oder das auslösen von erweiterten Aktionen. Das Servermodell ist in der Regel eine Datenbank. In knockout/vue, anstelle von client-side "Modell", es wäre ViewModel. Wenn Sie reagieren/vue mit redux/flux-dann die client-Seite wäre View-ViewModel-Modell-ServerHTTPEndPoints, wo das Modell wäre die redux/Pulver Speichert. Auch, oft auf der server-Seite ist ein service eingeführt: ServerHTTPEndPoints-Service-Modell. Diese Art unit-tests können auf den Dienst direkt, anstatt feuern Sie den gesamten web-server und das HTTP-verbindungen.
InformationsquelleAutor Curtis Yallop
Habe ich verwendet, MVVM in desktop-Anwendungen, und ich habe eine Eigenschaft in meinem viewmodels benannte Modell, wo ich das speichern eines business-Objektes, wie das Modell. Mein Blick auf ein Objekt mit der Eigenschaft DataContext, wo die viewmodels sind gespeichert, bevor die views geladen werden. Ein Blick binden Ihre Kontrollen mit dem business-Objekt mit dem Pfad DataContext.Modell.BusObjPropertyName. Ich habe eine UserInteractionService, registrieren Sie von Anfang an die Beziehungen zwischen views und viewmodels. Wenn ein viewmodel benötigt, um zu zeigen, ein anderes viewmodel, ruft es die Methode ShowView in der UserInteractionService und übergeben Sie das viewmodel als parameter. Dann ist der service instanziieren der entsprechenden Ansicht auf das viewmodel empfangen, stellen Sie die DataContext-Eigenschaft mit dem viewmodel und zeigen Sie es.
Wenn es möglich ist, zu tun, die Bindungen zu einem Weg, wie die oben in Asp, die alle dieses Modell kann wiederverwendet werden, entweder in der desktop-wie Web-Anwendungen.
InformationsquelleAutor Danilo Silva