MVVM oder MVC? Möchten Sie die gleichen Klassen für WPF und ASP.NET verwenden?


10

Ich bin ein Neuling in Bezug auf Design Patterns. Ich habe gerade angefangen, MVC zu lernen, als ich ein neues Summen höre, MVVM.

Ich möchte die Erkenntnisse aus beiden kennenlernen, indem ich eine alte Inventar- und Rechnungsanwendung neu entwerfe, die ich für einen Kunden entwickelt habe. Ich möchte sowohl eine Windows-basierte WPF-Anwendung als auch eine webbasierte Version schreiben. Ich möchte, wenn möglich, die gleichen Klassen verwenden, wenn nicht, dann zumindest mit geringen Änderungen.

Ich habe einige Artikel gelesen, folge aber nicht der Architektur und den dort diskutierten allgemeinen Konzepten von .NET 3.5 & 4. Ich möchte Schritt für Schritt vorankommen, indem ich nur das entwerfe, was ich in meinem realen Projekt wirklich brauche.

Gibt es eine einfache Schritt-für-Schritt-Referenz zu MVVM? Ist MVVM eine Supermenge oder eine Teilmenge von MVC? Welches Muster ist modern und welches sollte ich für Windows- und Webversionen meiner Anwendung wählen?

Es gibt bestimmte Klassen, die ich selten mit der Ansicht verbinden muss. In diesem Fall erweist sich das Entwerfen derselben Klasse auf MVVM-Weise als zusätzliche Arbeit.

Antworten:


10

Gibt es eine einfache Schritt-für-Schritt-Referenz zu MVVM?

Ja da ist. Schauen Sie sich das hier an.

Ist MVVM eine Supermenge oder eine Teilmenge von MVC?

MVVM gehört zur MVC-Familie. Wenn Sie das also überhaupt sagen können, handelt es sich um eine Teilmenge. Es ist eine Variante, die Benutzeroberfläche von der darunter liegenden Geschäftslogik zu entkoppeln. Ich würde es als Geschwister von MVC beschreiben. Seit den Anfängen von OOP haben Menschen nach Möglichkeiten gesucht, die Benutzeroberfläche von ihrer Logik zu entkoppeln. MVC war der erste Archetyp, der sich entwickelte. Es ist ziemlich einfach, obwohl die meisten Leute es nicht richtig verstehen. Die Ansicht ist nur ein Beobachter des Modells und ruft es bei Bedarf auf. Der Controller ist nur eine Strategie für die Ansicht, um mit dem Modell zu kommunizieren, beispielsweise wenn Sie ein austauschbares Verhalten benötigen (z. B. ReadonlyController, AdminController). MVC ist sehr erfolgreich und es ist wirklich eine gute Praxis, es anzuwenden.

MVVM ist eine spezielle Art von MVP-Muster, wie von Martin Fowler beschrieben . MVP versucht, die Ansicht so dumm wie möglich zu halten (während weiterhin Benutzereingaben usw. vorgenommen werden), wodurch die Testbarkeit verbessert wird. Es zielt auf eine Abstraktion der Sichtweise und der Interaktionslogik ab, die in den Präsentator gestellt werden soll. Der Präsentator kommuniziert ausschließlich mit dem Modell / der Geschäftslogik und aktualisiert die Ansicht. Martin Fowler beschreibt MVVM ziemlich genau in seinem Präsentationsmodellmuster.

Die Ansicht wird vollständig in ein ViewModel abstrahiert. Wenn Viewjemand eine Immobilie ViewModelbraucht, muss er sie auch haben. Es (das ViewModel) soll völlig unabhängig von der zugrunde liegenden UI-Technologie sein, einer Abstraktion. Um zwischen View und ViewModel zu kommunizieren, muss ein Synchronisationsmuster verwendet werden (dh Observer). Dies ist in einer zustandslosen Webumgebung nicht einfach zu erreichen. MVVM unterscheidet sich von MVP, da die Ansicht nicht mehr an Ihr Modell / Ihre Geschäftslogik gebunden ist, sondern an ein ViewModel.

Welches Muster ist modern und welches sollte ich für Windows- und Webversionen meiner Anwendung wählen?

Das Präsentationsmodell (MVVM-ähnlich) sollte theoretisch völlig unabhängig von der verwendeten UI-Technologie sein. Der Synchronisationsaspekt muss jedoch abgedeckt werden. Dies kann einfach durch Binden an Befehle und Eigenschaften mit WPF erfolgen, wo der Synchronisationskleber bereits vorhanden ist. Bei ASP.NET ist dies eine andere Geschichte. Es gibt jedoch einen Artikel über CodeProject, in dem das Präsentationsmodellmuster für alle Windows-UI-Technologien verwendet wurde. Guck mal.


4

Aufgrund von Lebenszyklusproblemen und der Notwendigkeit, den Status zwischen Seitenbeiträgen beizubehalten, fällt es Ihnen sehr schwer, 100% Ihres Nicht-UI-Codes zwischen Web und WPF wiederzuverwenden. Asp.net verfügt nicht über die für MVVM erforderliche leistungsstarke Datenbindung. Außerdem muss heutzutage ein Großteil der Logik in jscript ausgeführt werden, da die Benutzer erwarten, dass sich die Benutzeroberfläche selbst aktualisiert, ohne dass ein Postback erforderlich ist.

Wenn Sie SilverLight verwenden könnten, wäre Ihr Leben viel weniger komplex :-)

Können Sie auch einen Webbrowser in Ihrer WPF-App für die allgemeinen Teile der Benutzeroberfläche hosten?


Welche Vorteile kann ich mit SilverLight erzielen?
RPK

1
@PRK, Silverlight lässt Sie meistens alles tun, was WPF tut, und wenn Sie alle Ihre "Web" -Benutzer dazu bringen können, es zu installieren, können Sie auch eine Lösung erstellen, auf die über das Web zugegriffen wird und die sich wie eine Web-App "anfühlt".
Ian

4

Ihre Absicht, dieselben Klassen für die ASP.Net- und WPF-basierte Benutzeroberfläche zu verwenden, ist nicht sehr praktisch. Die Datenbindung und die Verwendung von Javascript im Web unterscheidet sich stark von WPF. Die einzige Option, die mir einfällt, ist MVP mit vollständig passiver Ansicht . Theoretisch können Sie denselben Präsentator haben, der eine Web- und eine WPF-Seite ausfüllt.
In der Praxis werde ich eine Architektur entwickeln, bei der sich die meisten Geschäftsregeln in einer Webdienstschicht und zwei verschiedenen Präsentationsebenen mit so wenig Geschäftsregeln wie möglich befinden, die mit diesem Webdienst kommunizieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.