MVP パターンの鍵は、ビューとプレゼンターの間の懸念を分離することです。プレゼンターはエンティティのリストを設定するだけでよく、GridView、Repeater などを使用してデータをテーブルとして表示するかどうかは、ビューの関心事です。
あなたが説明することをしていたら、「ビューモデル」クラスを使用して、コントロールを作成するためのラッパーとして機能します。
public class DynamicControlViewModel
{
public enum ControlTypes
{
TextBox,
DropDown,
CheckBox
}
public string LabelValue { get; set; }
public ContrlTypes ControlType { get; set; }
}
私のビューは次のようになります。
interface IDynamicControlsView
{
IEnumerable<DynamicControlViewModel> DynamicControls { set; }
}
そしてプレゼンター:
// This method would be called within your Presenter
public override void Initialize()
{
_view.DynamicControls = ConvertDataToViewModel(data); // your method to fetch the data would replace 'data'
}
ビュー実装 (.ASPX コード ビハインド) のプロパティ セッターは次のようになります。
public IEnumerable<DynamicControlViewModel> DynamicControls
{
set
{
foreach (DynamicControlViewModel model in value)
{
// build up user controls here....
switch (model.ControlType)
{
case DynamicControlViewModel.ContrlTypes.TextBox:
// add text box
break;
case DynamicControlViewModel.ContrlTypes.DropDown:
// add drop down
break;
case DynamicControlViewModel.ContrlTypes.CheckBox:
// add checkbox
break;
default:
throw new ArgumentOutOfRangeException();
}
}
}
}
ビュー モデルを使用すると、単体テストが容易になり、懸念事項をより明確に分離できます。