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

C# 您使用什么规则来描述MVP方法和成员,c#,java,design-patterns,mvp,C#,Java,Design Patterns,Mvp,在使用MVP模式时,我经常会遇到一些方法和成员,它们似乎不属于View或Presenter类……我的问题是:您使用什么规则来决定哪些类包含哪些功能?我对MVP还比较陌生,所以请跟我开玩笑 TIA。归根结底,这取决于用户界面的操作程度。如果该方法包含许多对单个控件的直接访问,那么它很可能属于演示者。否则它属于视图。目标是将视图和当前之间的交互减少到完成软件设计所需的最小程度 比如说 Presenter.SetListTitle MyList.Name For I = View.MyListStar

在使用MVP模式时,我经常会遇到一些方法和成员,它们似乎不属于View或Presenter类……我的问题是:您使用什么规则来决定哪些类包含哪些功能?我对MVP还比较陌生,所以请跟我开玩笑


TIA。

归根结底,这取决于用户界面的操作程度。如果该方法包含许多对单个控件的直接访问,那么它很可能属于演示者。否则它属于视图。目标是将视图和当前之间的交互减少到完成软件设计所需的最小程度

比如说

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等。

归根结底就是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等。

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

最终得到的图案如下所示:

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

唯一的诀窍是如果表单上有datagrid。这些都需要大量的工作才能适应被动视图模式。

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

最终得到的图案如下所示:

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

唯一的诀窍是如果表单上有datagrid。这些需要大量的工作才能适应被动视图模式。

@醋:我想他指的是模型视图演示者()@醋:我想他指的是模型视图演示者()