MVPパターンを使用するとき、ViewクラスまたはPresenterクラスにうまく収まらないように見えるメソッドやメンバーに出くわすことがよくあります...私の質問は、どの機能がどのクラスにあるかを決定するためにどのルールを使用するかです。私はMVPに比較的慣れていないので、ユーモアを交えてください。
TIA。
MVPパターンを使用するとき、ViewクラスまたはPresenterクラスにうまく収まらないように見えるメソッドやメンバーに出くわすことがよくあります...私の質問は、どの機能がどのクラスにあるかを決定するためにどのルールを使用するかです。私はMVPに比較的慣れていないので、ユーモアを交えてください。
TIA。
私は 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;
}
}
唯一のトリックは、フォームにデータグリッドがある場合です。これらをパッシブ ビュー パターンに適合させるには、多くの作業が必要です。
要するに、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 を実装することだけです。