web-dev-qa-db-ja.com

Winforms用MVVM

可能性のある複製:
WindowsフォームのUIデザインパターン(MVVM for WPFなど)

WinFormsにMVVMを使用する必要がありますか?もしそうなら、MVPを使用するよりも利点は何ですか?

31
SA.

ここには2つの答えがあると思います。実際、「Should I」に対する答えと「Could I」に対する答えは1つだけです。

「できた」という限りでは、それは確かに可能です。 MVVMは実際には、ビューモデルにバインドできるビューに依存しています。 WinFormsはバインディングをサポートしているため、これは確かに可能です。そのバインディングをMVVMの世界でより有用にするために、いくつかのコードを記述する必要があるかもしれませんが、それは(少なくとも)理論的には可能です。 IMOがうまく機能すれば、メリットはかなり大きくなります。 WinFormsの「ビュー」に、ビジュアルオブジェクトを作成してバインドすることを除いて、UIの動作がないことを確認できます(コードでは、XAMLのように宣言ではありません)。 WinModelsオブジェクトのテストは非常に難しく、ViewModelsのテストは非常に簡単です。

あなたの本当の質問「Should I」に関する限り、それはプロジェクトレベルの決定のはるかに多くなります。あなたの目標は何ですか?かなり複雑なUIロジックをテスト可能にしたい場合は、少なくとも調べてみてください。しかし幸いにも、他のパターン(たとえば、Model-View-Presenter)には、テスト可能な「プレゼンター」クラスを作成するコミュニティバッキングが多いパターンがあります。プレゼンターに比べて、ユニットテストを作成する方がViewModelの方がはるかに簡単だと思いますが、それは個人的な好みだと思います。

余談ですが、MVVMパターンはほとんどが「プレゼンターモデル」パターンの別名です。 WinForms UIに対して「プレゼンターモデル」で成功している人がいるかどうかを確認することもできます。

幸運を!

21
Brian Genisio

Model-View-ViewModel(MVVM)パターンは設計パターンです。定義ごとに、設計パターンはオブジェクト指向の世界で一般的なソリューションを示し、このソリューションはさまざまなプラットフォーム(WPF、WinForms、Java Swingなど)に適用できます。MVVMはWPFは強力なバインディング機能を利用するため、WPFでの使用に最適ですが、Windowsフォームはデータバインディングもサポートしています。

WAF Windows Forms Adapterは、WindowsフォームアプリケーションにMVVMパターンを適用する方法を示しています。

8
jbe

MVVMがwinformsで実行できるとは思いません(少なくとも、多くのハッキングがなければ)。 MVVMは、view(your form)をviewmodel(your logic)から分離します。

WPFでは、xamlのdatabindingを使用して、viewmodelからビューを疎結合できるためです。これにより、ViewModelはビューについて何も知らなくても機能することができます。 これは良い記事です MVVMの基本について、いくつかの質問をクリアすると思います。

0
Jose