(1)がついているのはまだ発展途上だからです!
tatsuji-kuroyanagi/MVPVMTemplates · GitHub
プロジェクトテンプレートと項目テンプレートを作ってみました
ドキュメントライブラリの Visual Studio 2013/Templates フォルダ配下にコピーすれば使えるはず!
うまくいっていれば、プロジェクトの新規作成メニューにネコアイコンの MVPVM プロジェクトが追加されます
この MVPVM プロジェクト専用ですが Model 用 Entity、ViewModel、Page/ViewModel/Presenter が1組生成される MVPVM 基本ページも作成できるようになります
まだ発展途上でテンプレートで吸収しきれなかったため、残念ながら項目作成後 MainPresenter.cs に追加の記述が必要です
/// <summary> /// 初期化処理 /// </summary> public void Initialize() { this.View = App.Current as App; // セッション情報のシリアライズのために保存クラスを SuspensionManager に共有する SuspensionManager.KnownTypes.Add(typeof(BindableBase)); SuspensionManager.KnownTypes.Add(typeof(ViewModelBase)); SuspensionManager.KnownTypes.Add(typeof(MainViewModel)); SuspensionManager.KnownTypes.Add(typeof(TopPageViewModel)); this.View.Suspending += this.OnSuspending; ServiceLocator.SetLocatorProvider(() => ModuleContainer.Instance); ModuleContainer.Instance.Register<ApplicationSettingsModel>(); PresenterLocator.Set<MainPresenter>(this); // Presenter と Page のひもづけ PresenterLocator.Register<TopPagePresenter, TopPage>(); this.ViewModel.Initialize(); }
MainPresenter の Initialize メソッド内で、サスペンド時にシリアライズする ViewModel のクラスを SuspensionManager.KnownTypes に追加することと、PresenterLocator に Presenter と View のクラスの関連付けを登録しておく必要があります
他にもいろいろありますが、あとは実際のコードを見てもらった方がよいかなと思います
各所で酷評されている MVPVM アーキテクチャですが、個人的には下記の点でストアアプリ開発に役立つのではないかと思っています
Presenter が手続き的な処理を担当できるので ViewModel から Command が不要になる
View に Command の I/F が不要になり、イベントハンドラから直接 Presenter を呼び出せる
Presenter が View と ViewModel を参照するので Messenger が不要になる
Presenter を見るだけで処理の流れがつかみやすい
自分の利用の仕方だと、コントロールのイベントハンドラの仕組みをそのまま利用できるため Command を利用せずに View のイベントハンドラから Presenter を呼び出します
UnitTest の実施などで必要があれば View - Presenter - ViewModel の間をインタフェースで抽象化します
厳密にレイヤー分割をするのを良しと考える方からすると怒られそうですが、自分が携わるストアアプリ開発では WPF 案件などと比べ短納期なものが多い傾向があるので、重厚長大で厳密なアーキテクチャだと開発が軌道にのるまでの時間がかかりすぎて向いていなかったのです;
お話を頂いてから1週間以内で納品などということもある中で、Command や Messenger、その他レイヤー分割のための各種 フレームワークを準備している余裕などなく・・・そんな状況だと MVPVM は魅力的に感じます
できる限りすでにあるものを生かす軽量なフレームワークでアプリの本質の部分の実装に早期に着手でき、Model、View、Presenter、ViewModel のどれかにコード量が偏らずに実装できるような気がするからです
MVPVM はあまり普及が進んでいないらしくこれが正しい利用の仕方なのかどうかもよくわからないですが、個人的には ViewModel に Command は違和感があるのでしばらくはこのテンプレートを活用しながら見極めたいと思っています