WPF Application Framework(WAF)とCaliburnのふたつはオープンソースフレームワークであり、WPF/Silverlightアプリケーションを作成する開発者のために、レイヤアーキテクチャを使ったモデル-ビュー-ビューモデル(MVVM)パターンに基づく基盤を提供する。
WAFはモデル-ビュー-ビューモデル(MVVM)パターンを使っている。このパターンはMartin Fowler氏が定義したプレゼンテーションモデルにとても似ている。WAFで使われているこのパターンは下記のUMLダイアグラムであらわすことができる。
View – このクラスはすべてのGUI部品を保持するが、その状態や振る舞いは持たない。
IView – Viewクラスのインターフェイス。
ViewModel – GUI部品の状態と振る舞いを保持する。状態や振る舞いをここで保持するのは、アプリケーションのコードとGUIインターフェイスの結合が強くなるのを防ぐためだ。そうすることで他のGUIアプリケーションへの移植が簡単にできる。ViewModelはインターフェイスを通じてViewとやり取りをする。
Controller – MVVMパターンではControllerについてはなにも定義していないが、WAFにはコントローラが存在する。アプリケーションの流れを制御するのがControllerの役目だ。必要であれば、ViewModelがイベントを使ってコントローラに変更を通知する。
Model – 基礎となるドメインクラス。Model内の変更はイベントを通じてViewやViewModelに通知される。
WAFは下記の図のようなレイヤアーキテクチャを考慮して実装されている。
このフレームワークには基本となるクラス/インターフェイスが含まれており、アプリケーションに適切に適用するために拡張することが想定されている。たとえば、Controller、IView、ViewModel、Model、そしていくつかのファイルダイアログやメッセージサービスクラスだ。また、図書管理システムやメールクライアント、ドキュメント指向アプリケーションのサンプルを含む。単体テストも基本的にサポートする。WAFをCodePlexに提供したのはjbe2277氏だ。氏は身元を明かしていないが、Microsoft pattern&practicesのSmart Client Contribチームの開発者のようだ。
CaliburnはWPFとSilverlight向けのもうひとつのフレームワークだ。このフレームワークもMVVMパターンを中心に構築されている。このプロジェクトのウェブサイトでは下記のように特徴を説明する。
- メソッドをモデルにバインドできるようにすることで、MVVMアーキテクチャをシンプルで直感的にする。
- MVVMのアクションの前後に任意の実行フィルタや救済的な処理を追加できる。
- コルーチンの強力な実装によって非同期プログラミングを単純にする。
- Screen Activator、Screen Conductor、Screen Collection、そしてApplication Controllerのような一般的なUIの役割をサポートする基本クラスを提供する。
- 課題解決策の設計には、設定より規約による方法を使う。
- WPF向けの強力なデータバインディング検証フレームワークを使うことでTDDを支援する。
- WPFとSilverlightのアーキテクチャで同一のAPIを利用できる。
このフレームワークは多くの点でWAFと似ているようだが、より成熟した100を超えるクラスやインターフェイスを含み、SilverlightとWPF向けの予定管理システムとゲームライブラリのサンプルも含んでいる。また、CaliburnはBlue Spire社が支援している。