Frage

Wir haben mit dem MVP-Muster und Winforms mit einem fairen Betrag von Erfolg.Aber eine Frage immer öffnet, über MVP:

Was ist ein gut Granularität für Moderatoren?

Was ich damit meine, ist:Mit Winforms, eine feine Granularität der Regel funktioniert das ganz gut für den Benutzer steuert.So, es ist einfach zu Wiederverwendung Benutzer steuert und Sie als Bausteine verwenden, die Sie beim entwerfen komplexer GUIs.Jedoch, mit der gleichen (fein -) - Granularität mit den Vortragenden scheint ein problem zu sein.

Auf der einen Seite, mit grobkörnige Moderatoren behindert die Fähigkeit zu "plug-in" - Steuerelemente und möglichen gegen das DRY-Prinzip:Mehrere Moderatoren oft die Notwendigkeit zur Umsetzung der gleichen Logik (Auffüllen einer Liste von Kunden, für Beispiel), die durch mehrere komplexe Steuerelemente.

Auf der anderen Seite, fine-grained Moderatoren scheinen, zu begrenzen, die Wiederverwendung von Kontrollen in verschiedenen Situationen.Zum Beispiel, ein Bearbeiten-Ansicht kann manchmal speichern müssen die Kunden sofort;manchmal muss es link es um etwas anderes;manchmal ist es nur Bedürfnisse zu überprüfen;und so weiter.Es hängt oft davon ab, die komplexere Steuerung.Aber es gibt auch eine ganze Menge gemeinsamer Verhaltensweisen.

Beachten Sie, dass in beiden Fällen 1-presenter-1-Ansicht erreichbar ist.Was wird als "1-Ansicht" ändert.

Was ist in der Regel als best-practices für die presenter-Granularität mit MVP und Winforms?

  • Fine-grained, Moderatoren und anpassbare Verhalten durch Optionen oder so etwas in der Art?
  • Grobkörnige Moderatoren und niedrigen presenter Wiederverwendbarkeit?
  • Etwas anderes?

Haftungsausschluss:Wir verwenden hauptsächlich Supervising Controller, aber ich denke, es gilt auch für die Passive View.Sorry für die lange Frage.

War es hilfreich?

Lösung

Wir verwenden MVP an alle unsere Kunden, und dies ist definitiv ein Gespräch, das kommt in mehr als einer Gelegenheit.Wie sauber sollte unser code-behind-Klassen und Moderatoren werden?Having said, die, die wir gewählt haben, um die Verwendung der grobkörnigen presenter Ansatz.Im Grunde, jede form hat Ihren eigenen Moderator, und würde nur get-und set-Eigenschaften der Steuerelemente in einer bestimmten form mit seinem Blick.Auffüllen-Steuerung-ein Aufruf an eine db zum Auffüllen einer combobox zum Beispiel befindet sich in einem öffentlichen Dienst-Klasse.Jede Validierung von Benutzer eingegebenen Daten liegt in einer BO-Klasse, die wiederverwendet werden können, indem jede und/oder alle Moderatoren.Ich hoffe, das hilft.

Andere Tipps

In meinem CAD-CAM-system meine Moderatoren nicht verwenden Benutzer steuert.Bedienelemente befinden sich in der Aussicht, welche sich in einer EXE-assembly, die Umsetzung der Ansicht Schnittstellen der presenter verwenden.

Wenn Sie möchten, um eine Liste von Kunden, mit denen ich die hand aus, um die Ansicht mit einem DisplayCustomerList und mit jeder Kombination von Benutzer-Steuerelemente zum anzeigen des Kunden Liste.Wenn mehrere Ansichten zeigen die Kundenliste, in der gleichen Weise dann in die ExE/View-assembly teilen Sie ein Benutzer-Steuerelement oder Klasse zu tun.Dass die Klasse nicht außerhalb der assembly.

Unsere software wird angepasst, um viele verschiedene Arten von Metall schneiden Maschine.So legen wir sehr viel Wert auf die Möglichkeit, rip-off der Benutzeroberfläche und ersetzen es mit einer ganz anderen UI (entsprechend einer anderen Maschine).Alle diese Benutzeroberflächen auf die gleiche Reihe von core-Assemblys.

Die Hierarchie sieht wie folgt aus

Anzeigen EXE Presenter Umsetzung Befehl Assembler - Befehle werden ausgeführt, indem der Moderator das zu ändern das Modell Presenter-Schnittstellen Modell-Baugruppen

An der Seite sind belastbar Baugruppen definieren, dass dynamische Inhalte wie welche Dateitypen geladen werden können, Berichte, cutting device drivers, etc.Diese implementieren verschiedene Schnittstellen finden sich in der Modell-Baugruppen

Eine Sache, die ich tun, ist, dass ich nicht impelment ein view-presenter für jeden dialog.Wenn der dialog ist fest gebunden mit einem Befehl, dann ist es definiert, erstellt und verwendet neben der command-Klasse.Gelegentlich wird eine Gruppe verwandter Befehle teilen sich ein dialog (Datei-handling für Beispiel).

Die wesentliche Frage, die ich bei der Verwendung von MVP ist: "Was passiert, wenn Sie wollen, vollständig ersetzen die Formen mit etwas anderem?".Die Antworten auf diese Frage wird bestimmen, wo Sie sind zu abhängig von einem bestimmten Benutzer-Steuerelement oder Formular-engine.

Das größte problem (und eine, die ich nicht habe eine gute Antwort für) mein setup ist, dass die aktuellen Entwicklungsumgebungen und Sprachen machen es sehr einfach zu binden, Benutzersteuerelemente, um Datensätze in einer Datenbank.Es ist so produktive gegenüber jedem anderen setup es neigt dazu, zu Dominieren das design.Ich habe nicht zu deal mit die Problem sehr viel in meinem CAD-CAM-Anwendung, so habe ich keine andere Antwort, als durch die dataset-Ansicht und lassen Sie ihn behandeln. Diese Seite hat einige Muster, die von nutzen sein können in dieser situation.

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