您使用什么规则来描述MVP方法和成员

时间:2009-05-22 07:56:58

标签: c# java design-patterns mvp

当使用MVP模式时,我经常会遇到方法和成员,这些方法和成员在View或Presenter类中看起来并不合适......我的问题是:您使用什么规则来确定哪些类的功能是什么?我对MVP比较陌生,所以请幽默我。

TIA。

2 个答案:

答案 0 :(得分:4)

我倾向于支持MVP的Passive View变体,所以这对我来说不是问题。在被动视图模式中,View几乎将比简单赋值更复杂的任务委托给演示者。

你最终得到一个如下图案:

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;   
    }
}

唯一的技巧是如果表单上有数据网格。这些需要大量工作才能适应被动视图模式。

答案 1 :(得分:1)

归结为UI的操作程度。如果该方法包含大量直接访问单个控件的权限,那么它可能属于演示者。否则它属于视图。目标是将视图和当前之间的交互减少到完成软件设计所需的最小化。

例如

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

应该放在演示者中,如下所示

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

稍后如果您决定更改UI,则必须担心的是实现UpdateWithList而不是SetListTitle,AddListItem等等。