2010-12-28 22 views
3

Wir versuchen, das MVP-Muster in unserem aktuellen Projekt (asp.net app) zu verwenden und sind auf einige Probleme gestoßen. Die Seite verfügt über mehrere Abschnitte und wir verwenden Benutzersteuerelemente für diese unabhängigen Abschnitte. Jetzt hat jedes Benutzersteuerelement eine eigene Ansicht und einen eigenen Präsentator und die Seite fungiert als Basisansicht. Nun stellt sich die Frage, wie die Daten, die die Benutzersteuerung benötigt, an sie übergeben werden sollen.MVP Muster - Design Frage

Gemäß dem aktuellen Design erhält der Seitenpräsentator die erforderlichen Daten für die gesamte Seite. Wie können diese Daten an den User Control Presenter übergeben werden?

Andere Vorgehensweise, die wir denken, besteht darin, stattdessen nur Ansichten für Benutzersteuerelemente zu erstellen und den Seitenpräsentator für die Verarbeitung aller Ereignisse zu verwenden. In diesem Fall werden wir mehrere Ansichtsschnittstellen implementieren, die von jeder Benutzersteuerungsansicht implementiert werden. Aber wie würde der Seitenpräsentator mit den verschiedenen Ansichten interagieren?

Danke, jbn

Antwort

1

Warum haben die Benutzersteuerelemente ihre eigenen Ansichten und Präsentatoren?

Ich schlage vor, eine Ansicht und einen Moderator für die Seite zu haben und über die Seitenansicht mit den Benutzersteuerelementen zu interagieren. Wenn Sie Ereignisse verarbeiten oder Daten an die Benutzersteuerelemente übergeben müssen, können Sie sie der Seite zugänglich machen, und die Seitenansicht kann sie für den Präsentator umbrechen. Das Wrapping verhindert, dass der Präsentator direkt mit dem Benutzersteuerelement kommuniziert.

Hier einige Pseudocode:

IFooPageView 
{ 
    string SomeData {get; set;} 
    event EventHandler SomeEvent; 
} 

public class FooPageView : IFooPageView 
{ 
    public event EventHandler SomeEvent; 
    public SomeData 
    { 
     get { return myUserControl.SomeData;} 
     set { myUserControl.SomeData = value;} 
    } 

    protected override void OnInitComplete(EventArgs e) 
    { 
    //handle the user control event 
    this.myUserControl.SomeEvent += SomeEvent_EventHandler; 
    } 

    private void SomeEvent_EventHandler(object sender, EventArgs e) 
    {    
     //Raise the user control event to the presenter 
     if (SomeEvent!= null) 
      SomeEvent(this, EventArgs.Empty); 
    } 
} 

Ich würde ASP.NET Supervising Controller (Model View Presenter) From Schematic To Unit Tests to Code

Phil Haack lesen Es gibt viele gute MVP Informationen für Web-Formulare in Phils Artikel.

+0

schließlich ging mit dem Ansatz, den Sie skizziert haben. :) – jbagavathi

+0

ich bin froh, dass es geholfen hat. –

+0

Wenn das gleiche Benutzersteuerelement auf mehreren Seiten verwendet wird, z. etwas Ähnliches wie eine Adresskontrolle, heißt das nicht, dass der Großteil der obigen Logik auf jeder Seite dupliziert werden würde? – Rezler

0

eine der Lösung, die ich von

1- eine Liste des zusammengesetzten Moderatoren auf dem obersten Ebene Moderator pflegen denken kann, und wenn bekam man die Daten auf höchster Ebene Moderator, Sie kann die Daten verteilen, indem der richtige Moderator aus der Liste ausgewählt wird.

0

Nicht sicher, ob es genau zum MVP passt, aber Sie können eine Eigenschaft (View) von Ihren UCs verfügbar machen und diese mit den Daten auf Ihrer Seite aktualisieren.