2009-07-29 5 views
3

Ich versuche, eine Art Master/Detail UI mit einem MVP-Muster zu erstellen. Ich habe die üblichen Verdächtigen:Wie verknüpfe ich ein UserControl mit einem Formular in einem MVP-Muster?

interface IMainView{} 
class MainView: Form, IMainView{} 

interface IMainPresenter{} 
class MainPresenter{} 

// Numerous domain objects 

Ich habe auch ein Usercontrol, die auch ein Blick auf seinen eigenen MVP Triade:

interface ISubView{} 
class SubView: UserControl, ISubView{} 

interface ISubPresenter{} 
class SubPresenter{} 

Die MainPresenter erzeugt und Instanz des SubPresenter, was wiederum schafft eine Instanz von SubView. Mein Problem ist, dass die Views keine Referenzen zueinander enthalten oder sich überhaupt kennen. Sie kennen nur ihre eigenen Präsentatoren, aber ich möchte eine Ansicht, die ein UserControl ist, an eine andere Ansicht anfügen, die ein Formular ist. Ist es möglich, die Unwissenheit einer jeden Ansicht voneinander zu unterscheiden?

Bis zu diesem Punkt haben alle Ansichten die Eigenschaften offengelegt, die von jedem Präsentator als Systemtypen benötigt werden, so dass die Präsentatoren nicht davon betroffen wären, wenn eine ListBox zu einer ComboBox oder einer RadioGroup geändert würde. Ich würde es gerne so halten, wenn möglich, aber ich bin bereit, dieses Muster zu brechen, wenn ich keine andere Wahl habe.

Meine Gründe dafür ist das MainView präsentiert den Benutzer mit einer Sammlung von Objekten. Jedes Objekt kann eine von mehreren (mehr als 50) verschiedenen Klassen sein. Alle implementieren eine gemeinsame Schnittstelle, aber die Benutzeroberfläche zum Bearbeiten jedes Objekts hängt von der zugrunde liegenden Klasse ab.

Durch die Art und Weise, dies eine Winforms Anwendung ist .NET 2.0 (es ist kompiliert als C# 3.0 obwohl) Targeting

Antwort

1

I gelöst dies durch den subpresenter einen Verweis auf seine Ansicht zu dem Haupt Moderator passieren zu müssen, die es gelangt dann zu seiner Ansicht, die es dann einem leeren Panel zuweist.

subView 
    | 
    V 
subPresenter 
    | 
    V 
mainPresenter 
    | 
    V 
mainView 

Es wird als das gute alte Objekt übergeben wird so weder der Moderatoren müssen Verweise auf die WinForms-Namespace enthalten. Das mainView nimmt einfach einen Abkömmling von UserControl an und wirft es als solches ab.

+0

Es ist verboten, dass Referenten Ansichten erstellen !!! Du hast die Principa-Regel von MVP gebrochen! – dzendras

+0

Ich habe unzählige Beispiele und Variationen von Model/View/ untersucht. Die einzige konsistente Regel, die ich gefunden habe, besteht darin, ein gewisses Maß an Trennung zwischen der Ansicht und dem Modell/der Domäne beizubehalten. Wenn etwas über die Erstellungsreihenfolge, das Leben und die Eigentümerschaft der Schlüsselfiguren in der Triade gesagt wurde, wurde dies von denjenigen vermieden, die ihre Forschung veröffentlicht haben. –

Verwandte Themen