Frage

Ich entwickle nicht zu viele Desktop / Windows Forms-Anwendungen, aber es war mir einfiel, dass es das MVC (Model View Controller) -Muster einige Nutzen sein kann auf die Verwendung für Windows .NET Entwicklung Forms.

Hat jemand MVC in Windows Forms umgesetzt? Wenn ja, haben Sie irgendwelche Tipps für die Gestaltung?

War es hilfreich?

Lösung

Was ich in der Vergangenheit getan ist etwas ähnliches verwenden, Model-View-Presenter .

[Hinweis: Dieser Artikel verwendet, die im Internet zur Verfügung steht. Um es nun zu sehen, müssen Sie die CHM herunterladen und dann die Dateieigenschaften anzeigen und klicken Sie auf Zulassen. Dann können Sie die CHM öffnen und den Artikel. Dank einer Million, Microsoft! seufzen ]

Die Form ist die Ansicht, und ich habe eine IView Schnittstelle für sie. Die ganze Verarbeitung geschieht in dem Moderator, die nur eine Klasse. Das Formular erstellt einen neuen Moderator, und übergibt sich als IView des Moderators. So können Sie zum Testen statt in einem gefälschten IView passieren kann, und dann Befehle, um es vom Moderator senden und die Ergebnisse erkennen.

Wenn ich einen vollwertiges Model-View-Controller verwenden war, ich glaube, ich würde es auf diese Weise tun:

  • Die Form ist die Ansicht . Er sendet Befehle an das Modell wirft Ereignisse, die die Controller abonnieren können, und abonniert Ereignisse aus dem Modell.
  • Das Controller ist eine Klasse, die die Auffassung der Ereignisse abonniert und sendet Befehle an die Ansicht und das Modell.
  • Das Modell löst Ereignisse aus, dass die Ansicht abonniert hat.

Das würde passen mit klassisch MVC Diagramm . Der größte Nachteil ist, dass mit Ereignissen, es kann schwer sein, zu sagen, wer zu dem, was den abonnieren möchte. Die MVP-Muster verwenden Methoden anstelle von Ereignissen (zumindest so, wie ich es habe implementiert). Wenn das Formular / Ansicht, die ein Ereignis (z.B. someButton.Click) wirft, ruft die Form einfach eine Methode für den Vortragenden, die Logik für die es auszuführen. Die Ansicht und Modell haben keine direkte Verbindung überhaupt; sie haben beide durch die Vortragende gehen.

Andere Tipps

Nun, eigentlich Windows Forms implementiert eine „Kür“ -Version von MVC, ähnlich wie einige Filme etwas beschissen „Kür“ Interpretation einiger klassischen Bücher (Romeo & Juliet in den Sinn kommen) umzusetzen.

Ich sage nicht, Windows Forms' Umsetzung ist schlecht, es ist nur ... anders.

Wenn Sie Windows Forms verwenden und die richtigen OOP-Techniken, und vielleicht ein ORM wie EntitySpaces für Ihre Datenbank zugreifen, dann könnte man sagen, dass:

  1. Die ORM / OOP-Infrastruktur ist das Modell
  2. Die Formulare sind die Ansichten
  3. Die Ereignishandler sind der Controller

Obwohl sowohl View und Controller durch das gleiche Objekt dargestellt wird, machen Trenn Code aus Darstellungsweise erschwert (es gibt keine einfache Möglichkeit, Plug-in-einem „GTK + view“ in einer Klasse von Microsoft.Windows.Forms.Form abgeleitet).

Was Sie tun können, wenn Sie vorsichtig genug sind. Ist halten Sie Ihren Formularcode vollständig getrennt von Ihrem Controller / Modell-Code von nur GUI related stuff in den Event-Handler zu schreiben, und all andere Business-Logik in einer separaten Klasse. In diesem Fall eine andere View-Schicht zu schreiben, wenn Sie jemals verwenden GTK + wollten, müssten Sie nur die GUI-Code neu zu schreiben.

Windows Forms ist nicht von Grund auf neu entwickelt MVC zu verwenden. Sie haben zwei Möglichkeiten.

Erstens können Sie Ihre eigene Implementierung von MVC rollen.
Zweitens können Sie ein MVC-Framework für Windows Forms konzipiert wurden.

Die erste ist einfach zu tun beginnen, aber die weiter in Sie bekommen, desto komplexer ist. Ich würde vorschlagen, für eine gut aussehende, bereits existierende und gut getestet, MVC-Framework entwickelt, um mit Windows Forms zu arbeiten. Ich glaube, dieses Blog-Post ist ein anständiger Ausgangspunkt.

Für alle anfangen, würde ich vorschlagen, Windows Forms-Skipping und Entwicklung gegen WPF, wenn Sie die Wahl haben. Es ist eine viel bessere Rahmenbedingungen für die Benutzeroberfläche zu schaffen. Es gibt viele MVC-Frameworks für WPF entwickelt, einschließlich diese und dass ein .

Laut Microsoft der UIP Application Block von @jasonbunting erwähnt wird "archiviert." Stattdessen sehen Sie die Smart Client Application Block oder auch neuere < a href = "http://msdn.microsoft.com/en-us/library/aa480482.aspx" rel = "nofollow noreferrer"> Smart Client Software Factory , die sowohl WinForms und WPF unterstützt Smartparts.

Überprüfen Sie in den User Interface Process (UIP) Application Block . Ich weiß darüber nicht viel, aber sah vor ein paar Jahren auf sie. Es können neuere Versionen sein, um überprüfen.

"Die UIP Application Block basiert auf dem Model-View-Controller (MVC) -Muster."

Werfen Sie einen Blick auf die MS Patterns and Practices Smart Client-Anwendung Block, der einige Hinweise und Klassen hat, die man zu Fuß eine Modellansicht Moderator prasseln in Windows Forms durch Umsetzung -. Werfen Sie einen Blick auf die Referenzanwendung enthalten

Für WPF wird dies durch das Prisma Projekt

Die Software Fabriken Ansatz ist eine gute Möglichkeit, Best Practices

lernen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top