MVVM wird am häufigsten mit WPF verwendet, da es perfekt dafür geeignet ist. Aber was ist mit Windows Forms? Gibt es ein etabliertes und häufig verwendetes Ansatz- / Entwurfsmuster wie dieses auch für Windows Forms? Eine, die explizit gut mit Windows Forms funktioniert? Gibt es ein Buch oder einen Artikel, der dies gut beschreibt? Vielleicht MVP oder MVC basiert?
winforms
design-patterns
Bitbonk
quelle
quelle
Antworten:
Ich habe MVP ausprobiert und es scheint auch mit Windows Forms hervorragend zu funktionieren. Dieses Buch enthält ein Beispiel für Windows-Formulare mit MVP-Muster (Beispiel für eine Gehaltsabrechnungsanwendung). Die Anwendung ist nicht so komplex, gibt Ihnen jedoch eine Vorstellung davon, wie Sie sie erstellen.
Agile Prinzipien, Muster und Praktiken in C # ...
Sie können den Quellcode erhalten Source Code
BEARBEITEN:
Es gibt zwei Variationen des MVP-Musters: (a) Passive Ansicht und (b) Überwachung des Controllers
Für komplexe Datenbindungsszenarien bevorzuge ich das Supervising-Controller-Muster. Bei der Überwachung des Controller-Musters liegt die Verantwortung für die Datenbindung bei der Ansicht. Für Treeview / Datagrid sollte dies also in den jeweiligen Ansichten sein, nur die viewunabhängige Logik sollte auf den Präsentator übertragen werden.
Ich empfehle einen Blick auf das folgende MVP-Framework MVC # - Ein MVP-Framework
Gehen Sie nicht mit dem Namen (es ist ein MVP-Framework).
Einfache Winforms MVP Video Winforms - MVP
Ein Beispiel für den Umgang mit der Dropdown-Liste MVP - DropDownList
Einfaches Beispiel für eine Baumansichtsbindung (Bindung eines armen Mannes). Sie können in BindTree () eine beliebige Baumansicht-spezifische Logik hinzufügen.
Unten ist das Code-Snippet ... nicht getestet, direkt aus Gedanken eingegeben ...
quelle
Wie bereits gesagt, habe ich bei der Verwendung von Winforms immer in einem MVP-Muster gearbeitet. Das von Ihnen verwendete Entwurfsmuster bedeutet jedoch nicht, dass Sie es richtig verwenden. Mit MVP sind viele Anti-Patterns verbunden.
Wenn Sie alles gut starten möchten, müssen Sie das Framework zum Erstellen eines Smart Clients verwenden. Daher werde ich empfehlen, dieses Design und diese Vorgehensweisen zu verwenden: Smart Client Software Factory http://www.codeplex.com/smartclient
Sie haben hier eine Diskussion über die aktuellen Smart Client-Frameworks: http://codebetter.com/blogs/glenn.block/archive/2008/05/10/prism-cab-and-winforms-futures.aspx
PS: Ich mag diesen Beitrag über die MVP-Anti-Patterns: http://blog.mattwynne.net/2007/06/13/mvp-smells/
Hoffe das hilft
quelle
Das Model-View-ViewModel (MVVM) -Muster ist ein Entwurfsmuster. Per Definition zeigt ein Entwurfsmuster eine gängige Lösung in der objektorientierten Welt und diese Lösung kann auf verschiedenen Plattformen (WPF, WinForms, Java Swing usw.) angewendet werden. Ich bin damit einverstanden, dass MVVM am besten mit WPF verwendet wird, da es die starken Bindungsfähigkeiten nutzt. Windows Forms unterstützt jedoch auch die Datenbindung.
Der WAF Windows Forms-Adapter zeigt, wie das MVVM-Muster in einer Windows Forms-Anwendung angewendet wird.
quelle
Ich habe über eine Variation von MVP / MVVM-Entwurfsmustern namens MVP-VM geschrieben. Dies ist eine maßgeschneiderte Lösung für Winforms-Anwendungen, die eine vollständige Testabdeckung erfordern und die Datenbindung als Hauptmechanismus verwenden, um die Präsentation mit Modelldaten auf dem neuesten Stand zu halten.
MVVM für .NET Winforms
quelle
Ich habe zwei meiner Technikfreaks dieselbe Frage gestellt: Ist MVVM für WindowsForms möglich? Beide gaben mir genau die gleiche Antwort: "Auf keinen Fall! In WindowsForms fehlen die umfangreichen Bindungen von WPF und Silverlight (OneTime, OneWay, TwoWay, OnewayToSource) und auch die TypeConverters ."
Können wir wieder MVVM für WinForms haben? Ja wir können. Wir haben alle Teile. Wir müssen sie nur zusammenkleben.
quelle
Ich glaube, dass MVP ein Muster ist, das sich gut für die WinForms-Entwicklung eignet - was teilweise durch die Verwendung in CAB - Microsofts Framework für WinForms - belegt wird.
Ich verwende MVP in WinForms, um Code aus der Ansicht zu extrahieren, da ich den Ansichtscode nicht testen kann. Außerdem kann Code, der wiederverwendet (oder dupliziert) werden muss, nicht in der Ansicht angezeigt werden, in der er nicht freigegeben werden kann.
Ich kann auf mein eigenes Projekt verweisen, in dem ich das MVP-Muster ExceptionReporter.NET verwende . Obwohl ich sicher bin, dass ich es nicht perfekt benutze.
Sie haben erwähnt, dass MVVM für WPF arbeitet. Ich denke, der Grund dafür liegt in der starken Unterstützung der Datenbindung. Wenn Sie in WPF keine Datenbindung verwenden (und dies ist sicherlich nicht obligatorisch), können Sie MVP auswählen. Der Punkt ist, dass MVP eine gute Wahl für jede clientseitige Anwendung ist. Und möglicherweise eine bessere Wahl, selbst in WPF, wenn Sie vorhaben, Code zwischen Projekten zu teilen, die nicht WPF sind.
Weitere Belege für den Wert der Verwendung von MVP in WinForms finden Sie in der Videopräsentation von Boodhoo zur Verwendung von MVP: http://www.bestechvideos.com/2008/06/29/dnrtv-show-14-jean-paul-boodhoo-on-model -view-presenter Und ein MSDN-Artikel desselben Autors unter http://msdn.microsoft.com/en-us/magazine/cc188690.aspx
quelle
Bei diesem Entwurf geht es nicht darum, das Modell auszublenden, sondern vielmehr darum, die Wechselwirkungen zwischen den verschiedenen Ebenen der Anwendungen genau zu definieren. Sie können das Backend vollständig ändern. Solange Sie ein Modell über Bindtree übergeben, funktioniert Ihre Benutzeroberfläche weiterhin.
Jetzt kann Klassenmodell eine schlechte Wahl eines Namens in dem Beispiel sein, das Rajesh gibt. Dies kann TreeData oder RecordsData sein. Wie auch immer Sie es definieren, es hat alles, was Sie brauchen, um den Bindungsmechanismus von Winforms zu verwenden, um ein bestimmtes Steuerelement an die zugrunde liegenden Daten zu binden.
Die beste Seite, um nach dieser Art von Material zu suchen, ist hier . Martin Fowler hat eine Vielzahl nützlicher UI-Designmuster und Enterprise-Designmuster gesammelt.
Der Schlüssel dazu ist wiederum die Verwendung von Schnittstellen, um genau zu definieren, wie jede Schicht miteinander interagiert.
In meiner eigenen Anwendung (einer CAD / CAM-Anwendung zum Ausführen von Zerspanungsmaschinen) sieht meine Struktur so aus.
quelle
Sie können Unternehmensarchitektur, Muster und Vorgehensweisen als Ausgangspunkt verwenden, obwohl diese leicht veraltet sind.
Unter Allgemeine Anleitung finden Sie die Anwendungsarchitektur für .NET: Entwerfen von Anwendungen und Diensten , die eine gute Einführung in .NET-Methoden und mehrschichtige N-Tier-Anwendungen bietet.
Alternativtext http://i.msdn.microsoft.com/ms954595.f00aa01%28en-us%2CMSDN.10%29.gif
Für formellere "Muster" gibt es Enterprise Solution Patterns mit Microsoft .NET . (Quelle: microsoft.com )
Um ein paar zu nennen,
quelle
Die erste gute Erklärung für UI-Designmuster, die ich gelesen habe, war in Jeremy Millers Blog - Building Your Own CAB . Es beschreibt die gängigen Muster - Passive Ansicht, MVP usw. - und erläutert einige Möglichkeiten, wie Sie sie in C # implementieren können.
quelle
Sie können MugenMvvmToolkit ausprobieren , mit dem Sie eine "reine MVVM" für WinForms verwenden können. Aufgrund der Tatsache, dass es Bindungen auf allen Plattformen unterstützt, sind alle für die WPF-Plattform verfügbaren nativen Bindungsfunktionen auf allen Plattformen verfügbar (einschließlich WinForms).
quelle