MVVMモデルでアプリケーションを開発していますが、使用するフレームワークを選択する必要があるところまで到達しました。
可能なオプションには次のものがあります。
- MVVMツールキット
- MVVM Foundation
- WPFアプリケーションフレームワーク(WAF)
- ライトMVVM
- カリバーン
- シンチ
- プリズム
- ReactiveUI
あなたの経験では、どちらが良いですか?
MVVMモデルでアプリケーションを開発していますが、使用するフレームワークを選択する必要があるところまで到達しました。
可能なオプションには次のものがあります。
あなたの経験では、どちらが良いですか?
回答:
それは、実際に達成しようとしていること、および必要なインフラストラクチャの量、さらには、役立つサンプルを簡単に見つけられるかどうかに依存します。ここでは、少なくとも1つのMVVMフレームワークに積極的に関与しており、WPFの弟子グループを通じて他の人たちにも情報を提供してきたので、ここで関心を宣言します。それを言って、ここに行きます:
Microsofts MVVM Toolkit-これはまだアルファ段階です。それが最初にリリースされたとき、それがしなかったことのために、それは弟子たちから少々野蛮なことをしました。それを言って、MSはこのフレームワークを強化することを目指しているので、それは注目すべきものです-それはまだ準備ができていないだけです。
MVVM Foundation-ああ、Josh Smithのバージョンのフレームワーク。ジョシュは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互換性を含むように進化してきました。
Prism-繰り返しますが、使用したことはありませんが、多くの良い点を聞いています。
Ocean -CiderチームのプログラムマネージャーであるKarl Shifflettは、最近、フル機能の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
•ライセンス:コードプロジェクトオープンライセンス
• 特徴:
付属行動
IDataErrorInfoを使用した検証
IEditableObjectのサポート
弱いイベントの作成とサブスクリプション
弱いイベントを使用したメディエーターメッセージング
IOC / DIサポート(Unityを使用)
サービス:イベントロガー、メッセージボックス、保存ダイアログを開く、ポップアップ
スレッドヘルパー
メニュー項目のサポート
クローズ可能なビューモデル
MVVMコードジェネレーター
MVVM Lightツールキット
•作者:Laurent Bugnion
•Silverlightサポート:はい
•ドキュメント:Laurentのブログで公開されている多くの記事とその他の開発者
•ホスティング:CodePlex
•ライセンス:MITライセンス
• 特徴:
MSIインストーラー
VSプロジェクトとアイテムテンプレート
VSコードスニペット
ビューモデル間通信のためのメッセンジャーシステム
イベントをコマンドとして処理する
MVVMヘルパー
•作者:マークスミス
•Silverlightサポート:いいえ
•ドキュメント:Markのブログのいくつかの記事
•ホスティング:個人Webサイト
•ライセンス:定義されていません
• 特徴:
付属行動
マークアップ拡張を使用したビューモデルの作成
属性ベースの検証
ServiceProviderアプローチを使用したIOC / DI
クローズ可能なビューモデル
待機カーソル(new WaitCursor(){//ここにコードを挿入})
MVVM Foundation
•著者:ジョシュ・スミス
•Silverlightサポート:いいえ
•ドキュメント:JoshまたはMarlon GrechのブログのMessenger実装に関する記事
•ホスティング:CodePlex
•ライセンス:MS-PL
• 特徴:
ビューモデル間通信のためのメッセンジャーシステム
PropertyChangedイベントモニター
カリバーン
•作者:ロブアイゼンバーグ
•Silverlightサポート:はい
•ドキュメント:利用可能な完全なオンラインドキュメント
•ホスティング:CodePlex http://www.codeplex.com/caliburn
•ライセンス:MITライセンス
• 特徴:
コマンドはアクションの上に構築されているため、複数の入力パラメーター、フィルター、自動非同期実行など、同じ機能の多くを共有します
さまざまなUIコンポーネントのアクティブ化、非アクティブ化、シャットダウンのセマンティクスの処理など、UIライフサイクルの問題を処理するプレゼンター
Caliburnアプリケーションは完全にテスト可能です
バックグラウンドタスクマネージャなどのさまざまなユーティリティ
さまざまなUIパターンをサポート(MVVMのみではない)
依存性注入コンテナ
オニキス
•作者:ウィリアムeケンプ
•Silverlightサポート:いいえ
•ドキュメント:CodePlexで利用可能な基本的な紹介
•ホスティング:CodePlex
•ライセンス:指定なし
• 特徴:
ServiceLocatorパターン
カスタムマークアップ拡張機能を使用したViewModelの作成
IDisplayMessageなどのUI関連サービス
カルシウム
•作者:Daniel Vaughan
•Silverlightサポート:いいえ
•ドキュメント:CodeProjectに関する2つの非常に詳細な記事(パート1およびパート2)
•ホスティング:CodePlex
•ライセンス:著作権を使用、コピー、変更、および/または配布し、保持してください!
• 特徴:
実行時にモジュールを有効または無効にするモジュールマネージャ
同じAPIを使用してクライアントまたはサーバーからユーザーと対話するためのメッセージングサービス
アクティブなビューまたはビューモデルがインターフェイスを実装するときにのみアクティブになるコンテンツインターフェイスにWPF ICommandを関連付けるコマンドサービス
ツールバーとメニューの領域アダプター
すぐに使用できるクライアントサーバーロギング
Webブラウザー、テキストエディター、出力ウィンドウなどのモジュールが含まれています
ダーティファイル表示のあるタブ付きインターフェイス(モジュール間で再利用可能)
nRoute
•著者:リシ
•Silverlightサポート:はい
•ドキュメンテーション:著者のブログで利用可能な多くの記事(リンクについては、CodePlexプロジェクトのホームページを参照)
•ホスティング:CodePlex
•ライセンス:MS-PL
• 特徴:
Blend3の動作をサポートし、モデルをトリガーする
リソースロケーターフレームワーク
サービスの表示:OpenFileDialog、ShowMessage…
属性を使用してViewとViewModelを一緒にマップします
Nito MVVM
•作成者:Shammah
•Silverlightサポート:いいえ
•ドキュメント:いいえ
•ホスティング:CodePlex
•ライセンス:指定なし
• 特徴:
- ICommandインターフェイスのさまざまなMVVMフレンドリーな実装
海洋
•作者:Karl Shifflet
•Silverlightサポート:いいえ
•ドキュメンテーション:Karlのブログで利用可能な記事
•ホスティング:個人Webサイト
•ライセンス:指定なし
• 特徴:
VB.Netで記述
属性ベースの検証
viewmodel基本クラス:relaycommand、closeableviewmodel…
SQLサーバーデータアクセスレイヤー
基本的なMVVMフレームワーク
•作者:レスター・ロボ
•Silverlightサポート:いいえ
•ドキュメント:ライブラリで利用可能なサンプルアプリケーション
•ホスティング:CodePlex
•ライセンス:MS-PL
• 特徴:
委任コマンド\キーバインド
VM間のメッセージング
動作が関連付けられたコマンドとしてのイベントの処理
ダイアログなどをサービスとして処理する
VSコードスニペット
GoodLight
•作者:Peter O'Hanlon•Silverlightサポート:はい
•ドキュメント:ライブラリで利用可能なサンプルアプリケーション
•ホスティング:CodePlex
•ライセンス:MS-PL
• 特徴:
「ワークスペース」管理(閉じることができるドキュメントのセット)
肌サポート
VM間のメッセージング
ピートの素晴らしい答えに欠けているフレームワークについて説明しようとします:
MVVMツールキット(Microsoft)は、Visual Studioプロジェクトテンプレートを備えた非常に軽量なライブラリであり、このパターンで初心者をサポートする必要があります。マイクロソフトがツールキットについて良いフィードバックを受け取った場合、彼らはこれを新しいVisual Studio(おそらく2010)プロジェクトテンプレートとして実装する可能性があります。
Prism(Microsoft p&p)は、MVVMパターンのサポート以上のものを提供するフレームワークです。このプロジェクトの主な目的は、モジュール式の WPFおよび/またはSilverlightアプリケーションの構築を支援することです。MVVMパターンを実装する必要がある場合、または.NET / WPFの初心者である場合、このプロジェクトはお勧めしません。参照:リンク。
WPFアプリケーションフレームワーク(WAF)は、MVVMでWPFアプリを作成するのに役立つ軽量のフレームワークです。WPF専用なので、Silverlightはサポートされていません。Controllersの導入により、他のほとんどのMVVMフレームワークとは少し違う方法で進んでいます。アプリケーションワークフローを担当し、さまざまなViewModelの間を仲介します。
ええ。MvvmはIMOをサポートするためにフレームワーク全体を実際に必要としません。概念を理解していれば、INotifyを実装するクリーンなVMベースクラスから始めて、そこから先に進むのは非常に簡単です。
自分で混ぜる!
私はPRISMのEventAggregatorを使用し、MVVMファウンデーションのViewModelBaseを使用しました。また、RelayCommand(いくつかの場所で呼び出されるDelegateCommand)を調整して、他のデータも受け入れるようにしました。
それ自体は1つのフレームワークだけをお勧めしません。
私の賭けはCaliburnとMVVMlightにあります。これらのmvvmフレームワークの多くはSilverlightをサポートしていないようです。mvvmフレームワークへの機能の境界を設定するのが難しいため、IoCフレームワークよりも選択するMVVMフレームワークが増えると予測できます。私はあなたのプロジェクトにどちらがより適しているかを見つける最良の方法は、それらの機能をリスト/比較することだと思います。
Mix10もチェックしてください。私は話から多くを学びます:mvvmフレームワークの構築。
WPF / MVVMアプリケーションフレームワークに加えて拡張性(アドインを作成する機能)を探している場合は、SoapBox Coreの 免責事項に興味がある可能性があります。オープンソースであるため、使用しなくても、いくつかの優れたアイデアがあるかもしれません。拡張性とIoCの両方にMEFを使用します。