68

私はあまり多くのデスクトップ/Windows フォーム アプリケーションを開発していませんが、Windows フォーム .NET 開発に MVC (モデル ビュー コントローラー) パターンを使用すると何らかの利点があるのではないかと思いました。

WindowsフォームにMVCを実装した人はいますか? もしそうなら、デザインのヒントはありますか?

4

6 に答える 6

44

私が過去に行ったことは、似たようなModel-View-Presenterを使用することです。

[注: この記事は以前は Web で公開されていました。今すぐ表示するには、CHM をダウンロードし、ファイルのプロパティを表示して [ブロック解除] をクリックする必要があります。その後、CHM を開いて記事を見つけることができます。ありがとう、マイクロソフト! ため息]

フォームはビューであり、そのための IView インターフェイスがあります。すべての処理は、単なるクラスであるプレゼンターで行われます。フォームは新しいプレゼンターを作成し、それ自体をプレゼンターの IView として渡します。この方法でテストを行うと、代わりに偽の IView を渡し、プレゼンターからそれにコマンドを送信して結果を検出できます。

本格的な Model-View-Controller を使用する場合、次のようにすると思います。

  • フォームはビューです。コマンドをモデルに送信し、コントローラーがサブスクライブできるイベントを発生させ、モデルからのイベントをサブスクライブします。
  • コントローラーは、ビューのイベントをサブスクライブし、コマンドをビューとモデルに送信するクラスです。
  • モデルは、ビューがサブスクライブするイベントを発生させます。

これは、従来の MVC ダイアグラムに適合します。最大の欠点は、イベントの場合、誰が何をサブスクライブしているかを判断するのが難しい場合があることです。MVP パターンは、イベントの代わりにメソッドを使用します (少なくとも私が実装した方法では)。フォーム/ビューがイベント (someButton.Click など) を発生させると、フォームは単にプレゼンターのメソッドを呼び出してそのロジックを実行します。ビューとモデルには直接のつながりはまったくありません。どちらもプレゼンターを通過する必要があります。

于 2008-09-23T17:45:42.810 に答える
19

実際、Windows フォームは MVC の「フリー スタイル」バージョンを実装しています。これは、いくつかの映画がいくつかの古典的な本 (ロミオとジュリエットが思い浮かびます) のくだらない「フリー スタイル」解釈を実装するのと同じようにです。

Windows フォームの実装が悪いと言っているわけではありません。ただ...違います。

Windows フォームと適切な OOP 手法を使用し、データベース アクセスに EntitySpaces のような ORM を使用する場合は、次のように言えます。

  1. ORM/OOP インフラストラクチャはモデルです
  2. フォームはビューです
  3. イベント ハンドラーはコントローラーです。

View と Controller の両方を同じオブジェクトで表すと、コードを表現から分離するのが難しくなります (Microsoft.Windows.Forms.Form から派生したクラスに "GTK+ ビュー" をプラグインする簡単な方法はありません)。

十分に注意すれば、できること。イベント ハンドラーに GUI 関連のものだけを記述し、他のすべてのビジネス ロジックを別のクラスに記述することで、フォーム コードをコントローラー/モデル コードから完全に分離します。その場合、GTK+ を使用して別のビュー レイヤーを作成する場合は、GUI コードを書き直すだけで済みます。

于 2008-09-23T17:28:22.243 に答える
17

Windows フォームは、MVC を使用するように設計されていません。2 つのオプションがあります。

まず、MVC の独自の実装を展開できます。

次に、Windows フォーム用に設計された MVC フレームワークを使用できます。

最初は簡単に始められますが、先に進むほど複雑になります。Windows フォームで動作するように設計された、既存の十分にテストされた優れた MVC フレームワークを探すことをお勧めします。このブログ投稿は適切な出発点だと思います。

初心者の方は、Windows フォームをスキップして、オプションがあれば WPF で開発することをお勧めします。これは、UI を作成するためのはるかに優れたフレームワークです。このフレームワークやあのフレームワークなど、WPF 用に開発されている MVC フレームワークは多数あります。

于 2008-09-23T17:32:13.807 に答える
4

Microsoft によると、@jasonbunting が言及した UIP アプリケーション ブロックは「アーカイブ」されています。代わりに、Smart Client Application Block 、またはWinForms と WPF SmartParts の両方をサポートするさらに新しいSmart Client Software Factoryを見てください。

于 2008-09-23T23:06:03.880 に答える
2

User Interface Process (UIP) Application Blockにチェックインします。詳しくはわかりませんが、数年前に見たことがあります。新しいバージョンがあるかもしれませんので、チェックしてみてください。

「UIP アプリケーション ブロックは、モデル ビュー コントローラー (MVC) パターンに基づいています。」

于 2008-09-23T17:30:42.703 に答える
1

MS Patterns and Practices Smart Client アプリケーション ブロックを見てください。これには、Windows フォームでモデル ビュー プレゼンター パターンを実装する手順を説明するガイダンスとクラスが含まれています。含まれている参照アプリケーションを見てください。

WPF の場合、これはプリズムプロジェクトによって置き換えられています。

ソフトウェア ファクトリ アプローチは、ベスト プラクティスを学ぶのに最適な方法です。

于 2008-09-23T19:39:05.143 に答える