WPF アプリでは常に MVVM を使用しますか、それとも代替パターンはまだ実用的/便利ですか? 質問する

WPF アプリでは常に MVVM を使用しますか、それとも代替パターンはまだ実用的/便利ですか? 質問する

本の374ページMicrosoft .NET エンタープライズ向けアプリケーションの設計プレゼンテーション層のパターンの進化とそれがプラットフォームに与える影響に関するチャートがあります (図 7-14)。

このチャートは、オリジナルの MVC パターンからより現代的なバリエーションへの進化を示すだけでなく、次の現代的なパターンが次のテクノロジーに適用できることも示しています。

  1. モデル2(MVC)
    • ウェブのみ
  2. 受動的な見方(最優秀選手)
    • ウェブ
    • Winフォーム
    • WPFWPF の
  3. 監督コントローラー(最優秀選手)
    • ウェブ
    • Winフォーム
    • WPFWPF の
  4. MVVM(プレゼンテーションモデル)
    • WPFのみ

注記:このチャートには載っていない、最近注目されているもう1つのパターンはプレゼンターファースト(MVP)これは、TDD にさらに適応できるものと想定されていました。


私の理解では、WPFで開発する場合、MVVMパターンは事実上の選択肢です(モデル2ウェブ開発用です。とはいえ、受動的な見方監督コントローラー、 またはプレゼンターファーストWPF アプリでは、このようなアプローチでは、フロントエンドが WPF、WinForms、または Web のいずれであるかをあまり気にしないアプリケーションになります。これらの MVP バリアントでは、より柔軟性が得られるようです。

しかし、UI プラットフォームに依存しない柔軟性 (必要ではないかもしれない) を目指すと、WPF 開発がはるかに困難になり、WPF が提供する機能やパワーの一部が失われるという代償を払うことになるのでしょうか? コストがメリットを上回るほどでしょうか?

言い換えれば、MVVM は非常に優れているため、WPF アプリケーションでは他の代替手段を検討する必要はありませんか?

ベストアンサー1

MVVM for WPFに含まれるドキュメント(概要の2ページ目)によると

このパターンの起源は不明ですが、Martin Fowler が説明した PresentationModel パターンと同様に、Smalltalk ApplicationModel パターンから派生したものと思われます。Expression チームが Blend のバージョン 1 を開発する際に、このパターンは WPF での使用に適応されました。WPF 固有の側面がなければ、Model-View-ViewModel パターンは PresentationModel と同一です。

マーティン・ファウラーのウェブサイトに行って調べるとプレゼンテーションモデル私たちはこれを持っています

パッシブ ビューやスーパーバイザ コントローラと比較すると、プレゼンテーション モデルでは、表示に使用されるビューから完全に独立したロジックを記述できます。また、状態を保存するためにビューに依存する必要もありません。欠点は、プレゼンテーション モデルとビューの間に同期メカニズムが必要になることです。この同期は非常に単純ですが、必須です。分離されたプレゼンテーションでは同期がはるかに少なく、パッシブ ビューではまったく必要ありません。

私が使用している金属切削CAD-CAMアプリケーションでは受動的な見方その理由は

  1. ビューを実装するモックオブジェクトを用意することでテストを容易にし、ソフトウェアの機能の大部分を自動的にテストできるようにします。
  2. コアモデルだけでなく、関連するタイプの金属切削ソフトウェアのさまざまなビューも再利用します。
  3. ビューとモデル間の相互作用を明確に文書化します。
  4. このソフトウェアは 1985 年以来継続的に開発されており、基盤となるツール、API、さらには言語自体にもいくつかの大きな変更が加えられているため、GUI ツールキットへの依存を排除​​します。

最初の 3 つの懸念事項は、MVVM、プレゼンテーション モデル、監視コントローラー パターンによって処理できます。ただし、#4 に対処できるのはパッシブ ビューだけです。

Martin Fowler が述べたように、パッシブ ビューのみに同期メソッドは必要ありません。MVVM は、WPF のプレゼンテーション モデルの実装です。ビュー モデルにあるビュー状態をビュー自体に結び付けるには、XAML インターフェイスに依存します。そのため、後で UI またはその API を変更すると、ビュー モデルも変更されます。

対照的に、パッシブ ビューでは、新しい UI 要素がビュー インターフェイスを実装することのみが必要です。実装されているフォームまたはコントロールが正しく応答するため、実際に何に接続されているかは問題ではありません。

しかし、その代償として、ビューの新しい要素を実装するときに追加の手順が必要になります。プレゼンターに新しい要素をどのように提示するか、また、どのレベルの抽象化で提示するかを決定する必要があります。一部のプロジェクトや、ダイアログ ボックスなどの一部の UI の種類では、この処理は過剰です。

MVVM が WPF の唯一の方法であるかどうかという質問に対する答えは、いいえ、そうではありません。これは、アプリケーションの開発を取り巻く他の問題を考慮して検討する必要があるツールです。

おすすめ記事