2009-05-22 4 views
0

Wenn ich das MVP-Muster verwende, stoße ich oft auf Methoden und Member, die nicht gut in die View- oder Presenter-Klassen passen ... Meine Frage ist: Welche Regeln? Benutzt du, um zu entscheiden, welche Funktionalität welche Klassen enthält? Ich bin relativ neu in MVP, also bitte humor mich.Welche Regeln verwenden Sie, um MVP-Methoden und Mitglieder abzugrenzen?

TIA.

+0

Sind Sie sicher, dass es nicht MVC ist? –

+1

@Vinegar: Ich denke er meint Model View Presenter (http://en.wikipedia.org/wiki/Model_View_Presenter) –

Antwort

4

Ich bevorzuge die passive Ansicht Variante von MVP, so ist dies ein Problem für mich. Im passiven Betrachtungsmuster delegiert die View ziemlich alles, was komplexer ist als eine einfache Zuweisung zum Moderator.

Sie winden mit einem Muster, die wie folgt aussieht:

public class MyView: IView 
{ 
    private MyPresenter Presenter; 

    private OnEvent() 
    { 
     Presenter.DoSomething(); 
    } 

    public string MyProperty 
    { 
     get{ return UIControl.Property;} 
     set{ UIControl.Property = value} 
    } 
} 

public interface IView 
{ 
    public string MyProperty{ get; set;} 
} 

public class MyPresenter 
{ 
    private IView view; 

    public void DoSomething() 
    { 
     ... 
     view.MyProperty = something; 
    } 
} 

Der einzige Trick Teil ist, wenn Sie einen Datagrid auf dem Formular haben. Diese erfordern viel Arbeit, um in ein passives Betrachtungsmuster zu passen.

1

Es läuft darauf hinaus, wie viel Manipulation der Benutzeroberfläche vor sich geht. Wenn die Methode viel direkten Zugriff auf einzelne Steuerelemente aufweist, gehört sie wahrscheinlich zum Moderator. Sonst gehört es auf die Aussicht. Das Ziel ist es, die Interaktion zwischen der Ansicht und der Gegenwart auf ein Minimum zu reduzieren, das für das Design der Software erforderlich ist.

Zum Beispiel

Presenter.SetListTitle MyList.Name 
For I = View.MyListStart to View.MyListEnd 
    Presenter.AddListItem MyList(I) 
Next I 
Presenter.ShowListAddBUtton 
Presenter.ShowListDelButton 

Sollte wie unten

Public Sub UpdateWithList(MyList as AList, View as AView) 
    Me.SetListTitle MyList.Name 
    For I = View.MyListStart to View.MyListEnd 
    Me.AddListItem MyList(I) 
    Next I 
    Me.ShowListAddBUtton 
    Me.ShowListDelButton 
End Sub 

Später in dem Präsentator gebracht werden, wenn Sie Ihre UI zu ändern entschieden, alles, was Sie haben Grund zur Sorge ist die Umsetzung UpdateWithList nicht SetListTitle, AddListItem, usw.