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