WinFormsで学ぶ MVP パターン入門
1. MVPパターンとは?
MVP(Model-View-Presenter)は、GUIアプリケーションの設計パターンの一つです。「UIとロジックを分離」 し、コードの可読性と保守性を向上させることが目的です。
1.1 MVPの構成
MVPは以下の3つの要素で構成されます。
- Model(M)
- アプリケーションのデータやビジネスロジックを担当
- 例:データベースとのやり取りやデータの計算処理
- View(V)
- ユーザーに表示するUI
- 例:WinFormsの
Form
やUserControl
- ロジックを持たず、表示のみに徹することが重要
- Presenter(P)
- ModelとViewの橋渡しを担当
- ユーザーの操作を受け取り、適切な処理をModelに指示し、結果をViewに反映
1.2 MVPと他のパターンとの違い
パターン | 目的 | 特徴 |
---|---|---|
MVC(Model-View-Controller) | UIとロジックの分離 | Web開発に適している。WinFormsには不向き |
MVVM(Model-View-ViewModel) | データバインディングを活用 | WPF向き。WinFormsではデータバインディングが弱い |
MVP(Model-View-Presenter) | WinForms向けの分離 | イベント駆動型のUIに適している |
2. WinFormsでMVPを学ぶチュートリアル
2.1 チュートリアルの概要
このチュートリアルでは、「名前」と「年齢」を入力し、ボタンを押すとラベルに表示されるアプリ を作成します。
このアプリをMVPパターンで設計し、ロジックとUIを分離 します。
ステップ1:プロジェクトを作成
- Visual Studioを開く
- 「Windowsフォームアプリ(.NET)」 を選択し、新規プロジェクトを作成
- プロジェクト名を「MvpExample」にする
ステップ2:Model(データ)を作成
データを保持するUserModel
クラスを作成します。
ファイル名:
UserModel.cs
ポイント:
UserModel
はデータを管理するため、UIの影響を受けません。- ビジネスロジック(計算やデータベース操作など)をこのクラスに追加できます。
ステップ3:View(画面)を作成
UserForm.cs
(フォームデザイン)を開く- 以下のUIを追加
TextBox
(名前入力用) →NameTextBox
TextBox
(年齢入力用) →AgeTextBox
Button
(表示ボタン) →ShowButton
Label
(出力用) →OutputLabel
次に、Viewのインターフェースを定義します。
ファイル名:
IUserView.cs
ポイント:
- View(
UserForm
)が実装すべきインターフェースを定義 event EventHandler ShowUserInfo;
でボタンが押されたときのイベントを通知する
ステップ4:View(UserForm)を実装
ファイル名:
UserForm.cs
ポイント:
- UIのイベント処理をPresenterに委譲
ShowUserInfo
イベントを発生させ、Presenterに通知- UIの更新は
ShowMessage()
のみが担当し、ロジックは書かない
ステップ5:Presenter(ロジック)を作成
ファイル名:
UserPresenter.cs
ポイント:
- Viewからのイベント (
ShowUserInfo
) を受け取る - Modelにデータをセットし、Viewに結果を渡す
- Presenterは直接UIを操作せず、Viewのインターフェースを通じて更新を指示する
ステップ6:アプリを起動
Program.cs
でPresenterを初期化します。
ファイル名:
Program.cs
ポイント:
UserForm
のインスタンスを作成UserPresenter
にUserForm
を渡し、MVPパターンを構築
7. まとめ
- Model(データ管理) →
UserModel
にユーザー情報を保持 - View(画面) →
UserForm
でUIの処理のみ担当 - Presenter(ロジック) →
UserPresenter
で処理を制御
このパターンを学ぶことで、ロジックとUIの分離 ができ、WinFormsアプリをより保守しやすく、テストしやすい構造にできます。
MVPパターンを習得すれば、さらに WPFのMVVMやASP.NET MVC に進むこともスムーズになります。
クラス図
このクラス図は、MVP(Model-View-Presenter)パターンを示しています。
このクラス図の関係を説明すると:
IUserView
はUserForm
に実装される。UserPresenter
はIUserView
を使用し、ModelとViewの橋渡しをする。UserModel
はユーザーのデータを保持し、UserPresenter
が利用する。Program
はUserForm
とUserPresenter
をインスタンス化し、アプリを開始する。

MVPパターンのメリット
項目 | 直接Formにロジックを書く | MVPパターン |
---|---|---|
コードの分離 | UIとロジックが混在 | 明確に分離される |
メンテナンス性 | 変更が大変 | 変更が容易 |
テストのしやすさ | フォームのテストが難しい | Presenter単体でテスト可能 |
再利用性 | 他のプロジェクトで使いにくい | ロジックを他のUIに適用可能 |
MVPパターンを使うことで、WinFormsアプリの品質を向上できる。
まとめ
- Model(データ管理) を作成する
- View(UI) はUI表示のみ担当する
- Presenter(ロジック) はModelとViewの仲介役
- MainメソッドでPresenterをセットアップし、MVPを実装する
WinFormsアプリを作るときはMVPパターンを意識すると、コードの管理がしやすくなります。
ディスカッション
コメント一覧
まだ、コメントがありません