MVVMモデルを使用してアプリケーションを開発していますが、使用するフレームワークを選択する必要があります。
可能なオプションには次のものがあります。
あなたの経験では、どちらが良いですか?
それは、あなたが何を達成しようとしているのか、どれだけのインフラストラクチャーをすでに設置したいのか、さらに役立つサンプルを簡単に見つけることができるかどうかに大きく依存します。ここでは、少なくとも1つのMVVMフレームワークに積極的に関与しており、WPF Disciplesグループを通じて他の人に情報を提供してきたので、ここで関心を表明します。そのため、少し偏見があります。それを言って、ここに行きます:
Microsofts MVVM Toolkit -これはまだアルファ段階にあります。それが最初にリリースされたとき、それは何をしなかったので、弟子たちから少し野avになりました。そうは言っても、MSはこのフレームワークを強化することを検討しているので、注目すべきものです。まだ準備が整っていません。
MVVM Foundation -フレームワークのああジョシュ・スミスのバージョン。 JoshはMVVMのパパの1人であり、このパターンの大きな支持者であり教師でもあります。その結果、他のフレームワークで見つけることができるものの多くは、その全体にわたってJoshの指紋を持っています。このフレームワークは、MVVMの基本を提供することを目的としており、より難解な問題の一部に対処することを目的としています。もともとこれはWPFのみを対象としていましたが、Laurent Bugnionや私などの人々は、これがSilverlight互換のフレームワークであることを意味する機能/プロジェクトを追加しました。
WAF -経験がないので、コメントすることはできません。
MVVM Light -Laurent Bugnionがこれを採用し、バージョン2に更新されました。これは非常に優れたフレームワークですが、MVVMアプリケーションのすべての側面をカバーすることを意図したものではありません。 Laurentのバックグラウンドを考えると、SilverlightとBlendabilityのサポートが非常に強力です。
UpdateLaurentは、.NET 3.5と.NET 4.0のバージョンが機能互換であることを教えてくれました。ローに行くワウ。
Cinch-Sacha Barberの優れたWPF専用MVVMフレームワーク。これは、私が上で説明したフレームワークよりも広い範囲をカバーしています。これは優れたフレームワークであり、Bill Kempfの優れた Onyx プロジェクトでカバーされている概念を活用しています。 OnyxはMVVMフレームワークを補完することを目的としており、MVVM/WPFで行うのが一般的に困難であった機能を追加します。繰り返しますが、元々はWPFのみを対象としていましたが、OnyxはSL互換性を含むように進歩しました-私が携わったことを特に誇りに思っています。
プリズム -繰り返しますが、使用したことはありませんが、それについて多くの良いことを聞いています。
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
•ライセンス:Code Project Open License
• 特徴:
添付の動作
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
•作成者:Josh Smith
•Silverlightサポート:いいえ
•ドキュメント:JoshまたはMarlon Grechのブログのメッセンジャーの実装に関する記事
•ホスティング: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関連サービス
カルシウム
•著者:ダニエルヴォーン
•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
•ライセンス:指定なし
• 特徴:
- iCommandインターフェイスのさまざまなMVVMフレンドリーな実装
オーシャン
•作成者:Karl Shifflet
•Silverlightサポート:いいえ
•ドキュメント:Karlのブログで利用可能な記事
•ホスティング:個人のWebサイト
•ライセンス:指定なし
• 特徴:
vB.Netで書かれた
属性ベースの検証
ビューモデルの基本クラス:relaycommand、closeableviewmodel…
SQLサーバーのデータアクセス層
基本的なMVVMフレームワーク
•作成者:Lester Lobo
•Silverlightサポート:いいえ
•ドキュメント:ライブラリで利用可能なサンプルアプリケーション
•ホスティング:CodePlex
•ライセンス:MS-PL
• 特徴:
command\Keybindingの委任
vM間のメッセージング
動作が付加されたコマンドとしてイベントを処理する
ダイアログ(など)をサービスとして処理する
VSコードスニペット
GoodLight
•作成者:Peter O’Hanlon•Silverlightサポート:はい
•ドキュメント:ライブラリで利用可能なサンプルアプリケーション
•ホスティング:CodePlex
•ライセンス:MS-PL
• 特徴:
「ワークスペース」管理(閉じることができるドキュメントのセット)
肌のサポート
vM間のメッセージング
ピートの素晴らしい答えに欠けているフレームワークを説明しようとしています。
MVVM Toolkit(Microsoft) は、このパターンの初心者をサポートするVisual Studioプロジェクトテンプレートを備えた非常に軽量なライブラリです。 Microsoftがツールキットについて良いフィードバックを受け取った場合、彼らはこれを新しいVisual Studio(おそらく2010)プロジェクトテンプレートとして実装するかもしれません。
Prism(Microsoft p&p) は、MVVMパターンのサポート以上のものを提供するフレームワークです。このプロジェクトの主な目標は、WPFおよび/またはSilverlightアプリケーションのmodularの構築を支援することです。 MVVMパターンを実装する必要がある場合、または.NET/WPFの初心者の場合、このプロジェクトはお勧めしません。 Link も参照してください。
WPF Application Framework(WAF) は、MVVMでWPFアプリを作成するのに役立つ軽量フレームワークです。 WPF専用であるため、Silverlightをサポートしていません。 Controllers の導入により、他のほとんどのMVVMフレームワークとは少し異なる方法になります。アプリケーションワークフローを担当し、さまざまなViewModelを仲介します。
えーMvvmはIMOをサポートするためにフレームワーク全体を実際に必要としません。概念を理解していれば、INotifyを実装するクリーンなVMベースクラスから始めて、そこから先に進むのは非常に簡単です。
独自のミックス!
PRIVMのEventAggregatorを使用し、MVVM FoundationなどのViewModelBaseを使用しました。また、RelayCommand(いくつかの場所で呼び出されるDelegateCommand)を調整して、他のデータも受け入れるようにしました。
フレームワークを1つだけにすることはお勧めしません。
私の賭けはCaliburnとMVVMlightになりますが、これらのmvvmフレームワークの多くはsilverlightをサポートしていないようです。 IoCフレームワークよりも多くのMVVMフレームワークを選択できると予測できます。mvvmフレームワークへの機能境界を設定するのが難しいからです。自分のプロジェクトに適したものを見つけるための最良の方法は、機能をリスト/比較することだと思います。
Mix10もチェックしてください。トークから多くのことを学びます:mvvmフレームワークの構築。
Ideablade によるカクテルとDevForceフレームワーク
私はPrismを使用していますが、気に入っています。私にとって大きなことの1つは、必要に応じて助けてくれる良い人が他にもいるということです。基本を実行したら、アプリに必要な拡張機能がたくさんあります。他のフレームワークと同じフレームワークを使用すると、非常に簡単になります。
全体として、私はアプリケーションの90%を使用しており、MVVM Toolkitで使用したのは、Executeで起動するデリゲート関数を指定してコマンドを作成するファクトリー関数です。数時間で他のフレームワークに切り替えられるか、フレームワークを切り替えられなくなると思います。
考慮すべきもう1つは、 MEFedMVVM です。いくつかのプロジェクトで使用しましたが、軽量で、邪魔にならず、SilverlightとWPFをサポートします。また、その製品を使用する人のために、Blendで設計時データをサポートすることもできます。
WPF/MVVMアプリケーションフレームワーク上で拡張性(アドインを作成する機能)を探している場合は、 SoapBox Coreに興味があるかもしれません免責事項:私はそれを書いた。オープンソースであるため、使用しなくても、良いアイデアがあるかもしれません。拡張性とIoCの両方にMEFを使用します。
nRoute もあります
MVVMをサポートするWPF/Silverlight用の本当に素晴らしいアプリケーションフレームワーク