0

MVPパターンを使用するとき、ViewクラスまたはPresenterクラスにうまく収まらないように見えるメソッドやメンバーに出くわすことがよくあります...私の質問は、どの機能がどのクラスにあるかを決定するためにどのルールを使用するかです。私はMVPに比較的慣れていないので、ユーモアを交えてください。

TIA。

4

2 に答える 2

4

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

唯一のトリックは、フォームにデータグリッドがある場合です。これらをパッシブ ビュー パターンに適合させるには、多くの作業が必要です。

于 2009-05-22T14:15:12.383 に答える
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 を変更することにした場合、心配する必要があるのは、SetListTitle、AddListItem などではなく UpdateWithList を実装することだけです。

于 2009-05-22T12:27:55.923 に答える