2

だから、私は古いasp.netアプリを書き直そうとしていて、今回はMVPでやろうと思っていました. アプリは、テーブルにラベルと入力フィールドを配置することにより、動的に生成されたフォームを表示します。

モデルから取得するのは、どのコントロールをレンダリングする必要があるかを説明するエンティティのリストです。

ここで、このリストを各行にラベルとコントロールを含むテーブルに変換する必要がありますが、どこでどのように行うかを決めることができません。

これらは私が考えることができるシナリオですが、MVP によるとどちらが正しいかわかりません。

  • アイテムごとに、プレゼンターでテーブル行を作成し、呼び出しますView.AddRow(row)
  • プレゼンターでテーブル行のリストを作成し、呼び出しますView.AddRows(list)
  • 各項目の呼び出しについてView.CreateRow(info)

何か案は?

ありがとう!

4

1 に答える 1

3

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

ビュー モデルを使用すると、単体テストが容易になり、懸念事項をより明確に分離できます。

于 2012-08-25T14:38:38.587 に答える