WindowsフォームアプリでMVPパターンを使用しています。ビューのラジオボタンを変更する必要があります。ビューでブール型のプロパティを公開することでこれを行うことができますが、代わりにイベントを使用してビューを操作する必要がありますか?
3 に答える
それは、純粋さと実用性の問題です...そして、ちょっとした個人的なスタイルの問題です. 重要ではありません...イベントは通常の方法よりも作業が多いだけですが、より分離されています。 個人的に
- ビューを分離したり、プレゼンターを意識したりしないようにしたいので、ビューはイベントを発生させることでプレゼンターと通信します。これにより、ビューがプレゼンターへの参照を持つ必要がなくなります。ビューを薄くて愚かに保ちます。
- 一方、プレゼンターは通常、ビュー (およびモデル) へのメンバー参照を持っています。したがって、インターフェイスを介してメソッド呼び出しを行うことにより、ビューと対話できます(IView インターフェイスに準拠している限り、ビューを置き換えることができます)。たとえば、あなたの場合、 Set_X_Option(eOptionEnum) は、プレゼンターが適切に呼び出すことができる IView インターフェイスのメンバーになります。
ただし、この IView 依存関係 (プレゼンターはインスタンス化してプラグインする必要がある IView への参照を持っています) を削除することもできます。上記のスキームは私を失敗させたことはありません...まだ。
「平易な言葉」の分析を使用して、「ラジオ ボタンが表示されるかどうかはビューのプロパティである」と言うので、実際のプロパティを使用してこれをビューに伝えます。
もう 1 つの (技術的な) 可能性は、Presenter でイベントを発生させることです。つまりRadioButtonVisibilityChanged
、View によってリッスンされ、新しい可視性が を介して渡されますEventArgs
。これは、ビューがプレゼンターから独立していて無知であることに反するため、MVP パターンを弱体化させます。私はそのようなナンセンスに反対することをお勧めします。
通常、コントローラーはプロパティを介してビューを変更し、ビューによって発生したイベントをサブスクライブして、変更を認識します。Asp.NET では基本的に Windows フォームと同じように動作しますが、 MVPの良い例を次に示します。