MVVMのどのフレームワークを使用する必要がありますか? [閉まっている]
-
05-07-2019 - |
質問
MVVMモデルを使用してアプリケーションを開発していますが、使用するフレームワークを選択する必要があります。
可能なオプションには次のものがあります。
- MVVMツールキット
- MVVM Foundation
- WPFアプリケーションフレームワーク(WAF)
- ライトMVVM
- カリバーン
- シンチ
- プリズム
あなたの経験では、どちらが良いですか?
解決
それは実際に達成しようとしていること、およびどの程度のインフラストラクチャをすでに設置しているか、さらに役立つサンプルを簡単に見つけることができるかどうかに依存します。少なくとも1つのMVVMフレームワークに積極的に関与しており、WPF Disciplesグループを通じて他の人に意見を述べてきたので、ここで関心を表明します。そのため、少し偏見があります。と言って、ここに行きます:
Microsoft MVVM Toolkit -これはまだ非常にアルファ段階で。それが最初にリリースされたとき、それは何をしなかったので、弟子たちから少し野avになりました。そうは言っても、MSはこのフレームワークを強化しようとしているので、注目すべきものです。まだ準備ができていません。
MVVM Foundation -ああ、Josh Smithのバージョンのフレームワーク。 JoshはMVVMのパパの1人であり、このパターンの大きな支持者であり教師でもあります。その結果、他のフレームワークで見つけることができるものの多くは、その全体にわたってJoshの指紋を持っています。このフレームワークは、MVVMの基本を提供することを目的としており、より難解な問題の一部に対処することを目的としています。もともとこれはWPFのみを対象としていましたが、Laurent Bugnionや私などの人々は、これがSilverlight互換のフレームワークになることを意味する機能/プロジェクトを追加しました。
WAF -経験がないため、コメントすることはできません。
MVVM Light -Laurent Bugnionがそれを採用し、バージョン2に更新されました。これは非常に優れたフレームワークですが、MVVMアプリケーションのすべての側面をカバーすることを意図したものではありません。 Laurentのバックグラウンドを考えると、SilverlightとBlendabilityのサポートが非常に強力です。
更新 Laurentは、.NET 3.5と.NET 4.0のバージョンには機能互換性があることを教えてくれました。ローに行くワウ。
Cinch-Sacha Barberの優れたWPF専用MVVMフレームワーク。これは、上で説明したフレームワークよりも多くの基盤をカバーしています。これは優れたフレームワークであり、Bill Kempfの優れた Onyx プロジェクトでカバーされている概念を活用しています。 OnyxはMVVMフレームワークを補完することを目的としており、MVVM / WPFで行うのが一般的に困難であった機能を追加します。繰り返しになりますが、元々はWPFのみを対象としていましたが、OnyxはSL互換性を含むように進歩しました。私が携わったことを特に誇りに思っています。
プリズム-繰り返しますが、使用したことはありませんが、多くのことを聞いたことがありますそれについての良いこと。
オーシャン-Karl Shifflett 、Ciderチームのプログラムマネージャーは、最近、フル機能のWPF MVVMフレームワークをリリースしました。繰り返しますが、これは優れたフレームワークであり、多くの推奨事項があります。
要点は、さまざまなフレームワークをダウンロードして、それらを見て、自分の考えや要件に最も直感的に適合するフレームワークを見つけることです。同じコードベースからSilverlightをサポートしたいと思う場合は、WPFのみのフレームワークを割引する必要があります。
他のヒント
この記事は非常に有用であることがわかりました http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ 今後のユーザーのためにここに持ってくるように
Cinchセクションを更新し、機能にSilverlightサポートを追加します
長い話でごめんなさい
一般的な機能:
• ViewModelBaseクラス(INotifyPropertyChangedインターフェイスの実装用)
• UIコマンドをViewModelのハンドラーにリンクするクラスのようなRelayCommand
•ユニットテストにはフレームワークが付属しています
シンチ
•作成者:Sacha Barber
• Silverlightのサポート:いいえ(Cinchバージョン2はSilverlightをサポートします)
•ドキュメント:すばらしい、CodeProjectで公開された6つの記事
•ホスティング:CodePlex
•ライセンス:Code Project Open License
•機能:
添付ビヘイビア
IDataErrorInfoを使用した検証
IEditableObjectのサポート
弱いイベントの作成とサブスクリプション
弱いイベントを使用した仲介者メッセージング
IOC / DIサポート(Unityを使用)
サービス:イベントロガー、メッセージボックス、保存ダイアログを開く、ポップアップ
スレッディングヘルパー
メニュー項目のサポート
クローズ可能なビューモデル
MVVMコードジェネレーター
MVVM Light Toolkit
•著者:ローラン・ブニオン
• Silverlightサポート:はい
•ドキュメント:Laurentのブログ+他の開発者でも利用可能な多くの記事
•ホスティング:CodePlex
•ライセンス:MITライセンス
•機能:
MSIインストーラー
VSプロジェクトおよびアイテムテンプレート
VSコードスニペット
ビューモデル間通信のためのメッセンジャーシステム
イベントをコマンドとして処理する
MVVMヘルパー
•著者:マークスミス
• Silverlightサポート:いいえ
•ドキュメント:Mark’のブログのいくつかの記事
•ホスティング:個人のウェブサイト
•ライセンス:定義されていません
•機能:
添付ビヘイビア
マークアップ拡張機能を使用したビューモデルの作成
属性ベースの検証
ServiceProviderアプローチを使用したIOC / DI
closeable viewmodel
待機カーソル(new WaitCursor(){//ここにコードを使用})
MVVM Foundation
•著者:ジョシュ・スミス
• Silverlightサポート:いいえ
•ドキュメント:JoshまたはMarlon Grechのメッセンジャーの実装に関する記事
•ホスティング:CodePlex
•ライセンス:MS-PL
•機能:
ビューモデル間通信のためのメッセンジャーシステム
PropertyChangedイベントモニター
カリバーン
•著者:ロブ・アイゼンバーグ
• Silverlightサポート:はい
•ドキュメント:完全なオンラインドキュメントが利用可能
•ホスティング:CodePlex http://www.codeplex.com/caliburn
•ライセンス:MITライセンス
•機能:
コマンドはActの上に構築されます複数の入力パラメータ、フィルタ、自動非同期実行など、同じ機能の多くを共有します
さまざまなUIコンポーネントのアクティブ化、非アクティブ化、シャットダウンセマンティクスの処理など、UIライフサイクルの問題を処理するプレゼンター
Caliburnアプリケーションは完全にテスト可能です
バックグラウンドタスクマネージャーなどのさまざまなユーティリティ
さまざまなUIパターンをサポート(MVVMのみではない)
依存性注入コンテナ
Onyx
•著者:ウィリアムeケンプ
• Silverlightサポート:いいえ
•ドキュメント:CodePlexで利用可能な基本的な紹介
•ホスティング:CodePlex
•ライセンス:指定なし
•機能:
ServiceLocatorパターン
カスタムマークアップ拡張機能を使用したViewModelの作成
IDisplayMessageなどのUI関連サービス
カルシウム
•著者:ダニエル・ヴォーン
• Silverlightサポート:いいえ
•ドキュメント:CodeProjectに関する2つの非常に詳細な記事(part1およびpart2)
•ホスティング:CodePlex
•ライセンス:著作権を使用、コピー、修正、および/または配布して保管してください!
•機能:
実行時にモジュールを有効または無効にするモジュールマネージャー
同じAPIを使用してクライアントまたはサーバーからユーザーと対話するためのメッセージングサービス
コマンドサービスは、アクティブビューまたはビューモデルがインターフェイスを実装するときにのみアクティブになるコンテンツインターフェイスにWPF ICommandを関連付ける
ツールバーとメニュー用の地域アダプタ
すぐに使用できるクライアントサーバーロギングの準備
Webブラウザ、テキストエディタ、出力ウィンドウなどのモジュールが含まれます
ダーティファイルを示すタブ付きインターフェイス(モジュール間で再利用可能)
nRoute
•作成者:Rishi
• Silverlightサポート:はい
•ドキュメント:著者のブログで入手可能な多くの記事(リンクについてはCodePlexプロジェクトのホームページを参照してください)
•ホスティング:CodePlex
•ライセンス:MS-PL
•機能:
Blend3の動作とトリガーモデルをサポート
リソースロケーターフレームワーク
サービスの表示:OpenFileDialog、ShowMessage…
ViewとViewModelを一緒にマップするために属性を使用します
Nito MVVM
•作成者:Shammah
• Silverlightサポート:いいえ
•ドキュメント:いいえ
•ホスティング:CodePlex
•ライセンス:指定なし
•機能:
- さまざまなMVVMフレンドリーなICommandインターフェイスの実装
海
•著者:カールシフレット
• Silverlightサポート:いいえ
•ドキュメント:Karl’のブログで利用可能な記事
•ホスティング:個人のウェブサイト
•ライセンス:指定なし
•機能:
VB.Netで作成
属性ベースの検証
viewmodel基本クラス:relaycommand、closeableviewmodel…
SQLサーバーのデータアクセス層
基本的なMVVMフレームワーク
•著者:レスター・ロボ
• Silverlightサポート:いいえ
&#822
私は、ピートの素晴らしい答えに欠けているフレームワークについて説明しようとしています:
MVVM Toolkit(Microsoft) は、このパターンの初心者をサポートするVisual Studioプロジェクトテンプレートを備えた非常に軽量なライブラリです。 MicrosoftがToolkitについて良いフィードバックを受け取った場合、彼らはこれを新しいVisual Studio(おそらく2010)プロジェクトテンプレートとして実装するかもしれません。
Prism(Microsoft p& p) は、より多くを提供するフレームワークですMVVMパターンのサポートよりも。このプロジェクトの主な目標は、モジュラー WPFおよび/またはSilverlightアプリケーションの構築を支援することです。 MVVMパターンを実装する必要がある場合、または.NET / WPFの初心者の場合、このプロジェクトはお勧めしません。 参照:リンク。
WPFアプリケーションフレームワーク(WAF) は、作成を支援する軽量フレームワークです。 MVVMを使用したWPFアプリ。 WPF専用であるため、Silverlightをサポートしていません。これは、コントローラー。アプリケーションワークフローを担当し、さまざまなViewModelを仲介します。
まあ。 MvvmはIMOをサポートするためにフレームワーク全体を実際に必要としません。概念を理解している場合、INotifyを実装するクリーンなVMベースクラスから始めて、そこから進むのは非常に簡単です。
自分でミックス!
PRIVMのEventAggregatorを使用し、MVVM FoundationなどのViewModelBaseを使用しました。また、RelayCommand(一部の場所で呼び出されるDelegateCommand)を調整して、他のデータも受け入れるようにしました。
フレームワーク自体を1つだけ推奨することはありません。
私の賭けはCaliburnとMVVMlightになります。これらのmvvmフレームワークの多くはsilverlightをサポートしていないようです。 IoCフレームワークよりも多くのMVVMフレームワークを選択できると予測できます。mvvmフレームワークへの機能境界を設定するのが難しいからです。自分のプロジェクトに適したものを見つける最良の方法は、機能をリスト/比較することです。
Mix10も確認してください。トークから多くのことを学びます:mvvmフレームワークの構築。
私はPrismを使用していますが、気に入っています。私にとって大きなことの1つは、必要に応じて良い例があれば助けてくれる他の人がいるということです。基本を実行したら、アプリに必要な拡張機能がたくさんあります。他のフレームワークと同じフレームワークを使用すると、非常に簡単になります。
全体として、私はアプリケーションを90%使用しており、MVVM Toolkitで使用したのは、Executeで起動するデリゲート関数を指定してコマンドを作成するファクトリー関数です。 数時間以内に他のフレームワークに切り替えることも、フレームワークをまったく切り替えないこともできると思います。
考慮すべきもう1つの要素は、 MEFedMVVM です。いくつかのプロジェクトで使用しましたが、軽量で、邪魔にならず、SilverlightとWPFをサポートします。また、その製品を使用する人のために、Blendで設計時データをサポートすることもできます。
WPF / MVVMアプリケーションフレームワーク上で拡張性(アドインを作成する機能)を探しているなら、 SoapBoxコア 免責事項:私が書いた。オープンソースであるため、使用しなくても、良いアイデアがあるかもしれません。拡張性とIoCの両方にMEFを使用します。
MVVMをサポートするWPF / Silverlight用の本当に素晴らしいアプリケーションフレームワーク