2009-05-14 14 views
2

Ich versuche, das MVP-Muster für WINFORMS zu implementieren. Es ist ein einfaches für mit einer Schaltfläche und einem Raster, beim Klicken auf die Schaltfläche wird das Raster geladen, und Benutzer können Werte in das Raster eingeben.Winforms MVP Grid-Ereignisse Problem

Für Click-Ereignis meiner Taste, ich habe so etwas wie dies:

_presenter.LoadGrid();

Was ist einfach und unkompliziert.

Meine Frage ist, in Bezug auf Raster ... Ich plane, eine Zeile klicken Ereignis auslösen .... zum Aktivieren/Deaktivieren der nachfolgenden Eingabefelder für die spezifischen Spalten/Zeilen des Rasters etc.

Ich verstehe, dass der Präsentator keine GUI-Elemente enthalten sollte und das View (Formular) sollte nicht wirklich Logic enthalten?

Damit das GridRowClick-Ereignis ausgelöst wird, muss das Grid (GUI) basierend auf Geschäftsregeln (Logic) bearbeitet werden. Ich bin verloren, wenn ich dem Moderator die Logik dieses Klickereignisses oder des Formulars überlassen möchte?

Wenn der Moderator das Click-Ereignis verarbeiten soll, werden die GUI-Komponenten nicht einbezogen? Wenn die Ansicht das click -Ereignis verarbeiten soll, sind die Feldnamen usw. alle geschäftsgesteuert (logisch) und werden dynamisch basierend auf Datentabellen verknüpft, die von der Business-Schicht zurückgegeben werden.

Jeder Rat wird sehr geschätzt werden.

Prost

Antwort

1

Es gibt (mindestens) zwei Varianten von MVP.

  • Passive Ansicht Muster
  • Supervising Controller-Muster

Passive Ansicht, wie der Name schon vermuten läßt, behandelt die Benutzeroberfläche als mehr oder weniger passive Schnittstelle zwischen dem Benutzer und der Anwendung.Es verschiebt so viel testbaren Code wie möglich an den Präsentator, sodass die Ansicht nur die grundlegendsten UI-Aktualisierungen verarbeiten kann.

Die Überwachungssteuerung gibt der Ansicht ein wenig mehr Verantwortung, indem sie die Datensynchronisierung verarbeiten kann. Dies geschieht normalerweise durch Datenbindung.

EventHandler() 
{ 
    presenter.HandleEvent(); 
} 

Wenn Umgang mit dem Ereignis Änderungen an der Form zu machen erfordert, setzen Sie, was als Eigenschaft aktualisiert werden muss:

In jedem Fall Ereignisbehandlung wird durch Delegierung an einen Moderator Verfahren erreicht

public string PropertyThatNeedsToBeUpdated 
{ 
    get 
    { 
     return Control.Property; 
    } 
    set 
    { 
     Control.Property = value; 
    } 
} 

Für die passive Ansicht sind Gitter eine Hürde. Ihre Komplexität macht es schwer, alle möglichen Ereignisse zu erfassen. Mit dem Supervising-Controller sind Grids viel einfacher, da Sie die Datensynchronisierung den datengebundenen Steuerelementen überlassen.

Sie müssen die Beurteilung vornehmen, welche für Ihre Situation besser geeignet ist.

0

Der Schlüssel ist immer, dass alle Business-Logik in den Präsentator, wo es prüfbar ist.

Die Ansicht sollte den Präsentator aufrufen, um die Geschäftslogik auszuführen und die erforderlichen Informationen (z. B. die mit der angeklickten Zeile verbundenen Daten) zu übergeben.

Der Präsentator führt dann die Geschäftslogik aus und aktualisiert die Daten.

Je nachdem, welche Art von Änderungen Sie vornehmen müssen, ist dies möglicherweise alles, was Sie tun müssen, da die vorhandene Datenbindung möglicherweise ausreicht, um die Ansicht automatisch zu aktualisieren. Wenn dies nicht ausreicht, kann der Präsentator einen oder mehrere Aufrufe an die Ansicht (natürlich über seine Schnittstelle) tätigen, um die erforderlichen Änderungen vorzunehmen.

Wie Sie sagen, sollten Sie darauf abzielen, die Menge an nicht-trivialem Code in Ihrer Ansicht zu minimieren, und insbesondere sollte die Ansicht keine Geschäftslogik enthalten.

EDIT:

Einige gute allgemeine Informationen über MVP und andere Präsentationsmuster hier: http://martinfowler.com/eaaDev/uiArchs.html

0

Sie könnten Teil 4 der Videoserie von Polymorphic Podcast auschecken. Er verwendet das überwachende Controller-Muster und zeigt eine Technik zur Handhabung von Datenrastern. Die ganze Serie war eigentlich eine gute Einführung für mich.

http://polymorphicpodcast.com/shows/mv-patterns/