Model-View-ViewModelはViewレイヤーからコードビハインドをすべて削除する事を目的として主にWPF、Silverlight、WP7開発で用いられるアーキテクチャパターンである。インタラクティブデザイナーはXAMLを用いてUXニーズに集中し、ViewModelへのバインディングを設定する。そのViewModelはアプリケーション開発者によって開発、メンテナンスされる。
MVVMはより一般的なMVVMPresentationパターンの具体的な実装の一つである。MVVMのViewModelはデータモデルよりもむしろ概念モデルで構成され、すべてのビジネスロジックと他の操作はModelとViewModelの中で実行される。これを実現する多くのフレームワークがある。そのいくつかを紹介する。
オープンソース
- PRISM – はマイクロソフトが提供している。MEF/Unity上で動作する。DI、コンポジットコマンドが利用でき、拡張することができる。詳細なチュートリアルとウォークスルーはMSDNにある。
- MVVM Light Toolkit – はVisual StudioとExpression Blend向けプロジェクトとアイテムテンプレートが用意されている。詳細はこちら。VSとExpression Blendで実行できるチュートリアルも用意されている。
- Caliburn Micro – はViewModelファースト、Viewファーストをサポートしている。コルーチンを通じて非同期プログラミングが行える。
- Simple MVVM Toolkit – はVSプロジェクトとアイテムテンプレート、DIが用意されている。ディープクローンとModel、ViewModel間のプロパティ関連がサポートされている。
- Catel – はプロジェクト、アイテムテンプレート、ユーザーコントロール、エンタープライズ・ライブラリ・クラスで構成される。動的なViewModelインジェクション、ViewModelのレイジーローディング、バリデーションをサポートしている。また、WP7特有のViewModelサービスもサポートしている。
クローズドソース
- Intersoft ClientUI – 有償。WPFとSilverlightのみサポートしている。また、MVVMフレームワークからは分離されている。他の多くの機能も提供している。
- Vidyano – 無料であるがオープンソースではない。エンティティマップされた、仮想永続化オブジェクト(データコンテナー)、ビジネスルール、ビルトインACLベースセキュリティが提供されている。
MVVMの入門としては、下記の資料を参照。
- Understanding MVVM PatternとDeep Dive MVVM(Laurent Bugnion氏による)
- Understanding the MVVM Pattern in Silverlight Applications(MS Silverlightチームによる)
- Presentation Pattern – InfoQ上のErik Lebel氏による動画プレゼンテーション
MVVMを用いる事の最も大きな恩恵の一つは関係性の分離であり、そうすることによってUXデザイナーとアプリケーションデベロッパーは平行に作業する事が出来る。逆に、関係性は単純なUI操作にとってはやり過ぎなものである。また、非常に大量のデータバインディングを利用すると、少しデバッグがしにくく、潜在的なパフォーマンス問題に繋がる。