Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

「わんくま同盟 東京勉強会 #90」に行ってきた(その1「きっと怖くないMVVM&MVPVM」by 暁 紫電さん)

f:id:JHashimoto:20140409044240j:plain

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さん) - プログラマーな日々