0

私は彼らがmvpパターンを実装した新しいクライアントにいます。

今私はそれを使用したいのですが、彼らのコードで見つけることができないのはこれです:私はクエリ文字列にIDを持つaspフォームを開きます。そのIDのデータオブジェクトを取得しました。これで、asp.netフォームのテキストボックスに表示するオブジェクトを取得しました。

私はこれを持っています:

プレゼンターを作成しました

プレゼンターには、IxxxViewを受け取るコンストラクターがあります

aspxページはIxxxViewを実装します

aspxで私はプレゼンターへの参照を持っています

aspxのロードで、プレゼンターを(this)でインスタンス化します

オブジェクトのIDをプレゼンターに渡すと、プレゼンターがデータを取得します。

(ここまでは順調ですね?)

次に、プレゼンターにオブジェクトがあり、ビューにテキストボックスがあります。

私は何を知っておくべきですか?

4

1 に答える 1

0

かなり典型的なMVP実装では、IViewインターフェイスがイベントを指定することを期待します。プレゼンターは、IViewへの参照(この場合はプレゼンターのコンストラクターにあります)を取得するときに、処理するイベントのイベントハンドラーをアタッチする必要があります。多くの場合、イベントの1つは、データをビューに配置するか、ビューをバインドするためにビューモデルに配置する必要があることをプレゼンターに通知することです。イベントは、プレゼンターがモデルの更新やプロセスの開始など、何らかのアクションを実行する必要があることを通知する場合があります。

WebFormsMvpでは、プレゼンターが(View.Modelプロパティを設定して)ビューのビューモデルにデータをロードした後、バインド構文を使用してビューをビューモデルにバインドできます。たとえば、テキストボックスコントロールは次のようになります。

<asp:textbox runat="server" DataSource="<%# Model.Data %>" />

WebFormsMvpを使用していない場合は、プレゼンターがデータをビューに渡す方法があることを確認するだけです。これを行うには、ユーザーコントロールが実装するIViewにプロパティを追加します。プロパティのセッターが呼び出されると、値を適切なコントロールに渡す必要があります。同様に、そのプロパティのゲッターが呼び出されると、そのコントロールの値を返す必要があります。

たとえば、ユーザーコントロールには、次のようなプロパティの実装を含めることができます。

string IMyView.ViewData
{
    get { return TextBox1.Text; }
    set { TextBox1.Text = value; }
}

ただし、凝ったものにしたい場合は、DataSourceコントロールを使用することもできます。覚えておくべき主なことは、MVPを採用している場合、ビューはプレゼンターよりもテストが難しいため、ビュー部分をできるだけシンプルに保つ必要があるということです。したがって、ビューは可能な限り実行しないようにする必要があります。値の設定、値の取得、イベントの発生など、ほとんど実行しません。要素の非表示または表示、強調表示または非強調表示などの動的ビューの動作は、IViewインターフェイスのプロパティを使用するか、プレゼンターとビューが共有するViewModelを介して、プレゼンターが制御する必要があります。

個人的には、WebFormsMvpを使用することをお勧めします。

于 2011-12-14T19:54:25.760 に答える