MVVMメモ

とりあえず自分のMVVMに関する認識
多分それほど間違ってはいないと思う。

・View→ViodelewM

 Viewのプログラムから変更、参照するプロパティと同じ物をViewModelにも用意し、
 Viewと、ViewModelのプロパティを(Binding)同期させる。

 Viewのプロパティ(テキストボックスのテキスト・チェックボックスのチェック、etc…)を 変更すると、
 同期されたViewModel側のプロパティも自動的に変更される。

 UIを操作したときに発生するイベントやコマンド(ボタンクリックなど)は、ViewModelに記述する
 コントロールをダブルクリックしたときに自動生成される場所(Window、Formクラス等の中身)に
 書いてはいけない

・ViewModel→Model

  ViewModelの関数(UI操作によって呼び出されたもの)は、Modelの関数を呼び出す。

・Model

 Modelはライブラリなどの非同期関数を呼び出し、その結果を受け取り、
 それをもとに次の処理を判断、実行する。

・Model→ViewModel

 Model処理の途中経過、結果などをイベントとして発行し、
 そのイベントで、Viewが変化する場合、ViewModelはそのイベントを受信する。

・ViewModel→View

 Modelから送られてきた、処理結果などによってViewを変化させる

 プロパティの変化だけで済むものであれば、Viewと同期されたプロパティを操作し、
 そうでない場合は(ダイアログの表示、画面遷移、etc)、事前に登録しておいた
 Viewの関数を呼び出す。 (イベントorMessenger)

MVVMの利点

 Viewからの操作ではなく、ViewModelの関数を直接呼び出しても正常に動作するため、ユニットテストが楽になる

 ソースコードがスッキリし、分業等も簡単になる

XAML環境(WPF/Silverlight)ではMVVM必須?

XAML環境では、スクロールやツリーの開閉等の際に
 表示されなくなったViewの値がリセットされてしまうことがある(らしい)ので
 Viewの状態を外部にバックアップする必要がある。

  • View-ViewModel間の同期に用いられるBinding機構が優秀なバックアップ機構として動作する。
  • ユニットテストが簡単
  • ソースコードがスッキリ

などの利点があるためMVVMの使用が強く推奨される。
他の手段(スクロール前後のイベント等)でのバックアップも不可能ではない……と思う

広告

akatukisiden について

フリーランスプログラマ 使用言語はC++,C#とそのつなぎのC++/CLI 専門はクライアントアプリ開発
カテゴリー: C#, MVVM タグ: パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中