6/7に「わんくま同盟 東京勉強会 #90」に行ってきました。途中で帰らなければならなかったので、全部のセッションは聞けなかったのですが、2回に分けて勉強会の内容を紹介します。
わんくま同盟
先月はゴールデンウィークいかがでしたか? 今回はスピーカーデビューの方もゲームに関する楽しいセッションをやってくれるそうです。 ASPやMVPなんかのセッションもあれば、数学っぽいセッションもアリ。今回も皆さんと一緒に楽しいひとときを過ごしましょう。...
今回は1回目です。最初のセッションは、暁 紫電さんの「きっと怖くないMVVM&MVPVM」でした。
セッション内容
MVVM
- UIアーキテクチャパターン
- XAML系フレームワークでは必須
- VIEW
- UI
- UIへの出力、入力
- ViewModel
- Viewからの情報を保持
- Viewからの入力やコマンドを処理しModelを呼び出す
- Model
- ビジネスロジック
疎結合と密結合
- ViewとViewModelで互いのインスタントや型名を直接使うと密結合
- データバインドを使えば疎結合
- ViewはViewModelの特定の型であることに依存してはいけない
- ViewのビハインドコードでViewModelを直接newしていると密結合と言えるかもしれない
デモ
- イベントハンドラに全部の処理を書いた状態からMVVMにしていく
1.全部イベントハンドラに記述
- 処理内容をMainWindowImplクラスに移す
- UIから別クラスのロジックメソッドにデータを個々に渡す必要がある。数が多くなると大変
2.データバインディング
- INotifyPropertyChangedを実装したBindingSourceBaseクラスをViewにバインディングする
- イベントハンドラはそのまま
3.イベントハンドラもMainWindowImplに移動
- ClickイベントにMainWindowImplのメソッドを登録
4.MainWindowImplクラスからビジネスロジックをBussincesLogicクラスに移動
5.イベントハンドラからコマンドバインディングに変更する
6.クラス名の変更
- MainWindowImpl→MainViewModel
- BindingSourceBase→ViewModelBase
- BussincesLogic→ViewModel
MVVMでの画面遷移手法
- ViewModelの型に応じてコントロールを切り替える方法
- データテンプレート
- コントロールの切り替えロジックを呼び出し、新しいコントロールに新しいViewModelを関連づける方法
- 逆方向バインディングコマンド
- Bevaiver
- TriggerAndAction
MVVMまとめ
- ViewとViewModelが互いを扱わなくていいはずのMVVMで画面遷移を行おうとするとViewwでViewModelを扱ってしまう
- そもそもMVVMは画面遷移の存在を前提にしていないのでは、
- 画面遷移の存在を前提とするパターンを必要→MVPVM
MVPVMとは
- View、ViewModelの上にPresenterを置き、そこで遷移、ナビゲーションを管理
MVPVMでの画面遷移
- View、ViewModel両方を扱うことができるPresenterに記述する
- MVVMではView、ViewModelの二か所に分割されていた画面遷移ロジックをPresenterにまとめられる
MVPVMまとめ
- ViewModelはバインディング対象になるプロパティのみを記述し、コマンドの中身はPresenterに記述する
- PresenterはView、ViewModelのどちらも扱えるので、その二つに分けて記述していた画面遷移ロジックをPresenter1ヵ所に記述できる
セッション資料
資料公開:わんくま同盟東京勉強会#90 きっと怖くないMVVM&MVPVM | akatukisiden's blog
きっと怖くないMVVM&MVPVMというタイトルでセッションを行いました OneDrive セッション資料およびサンプルコード ...
関連エントリー
「わんくま同盟 東京勉強会 #90」に行ってきた(その2「ASP.NETで株価チャートを作る」by XENOさん) - プログラマーな日々