この記事は一部情報が抜けているので注意!
最新の情報は訂正記事を参照してください。
前提
MVVMについて調べてみるといろんな表現(解説)があったので、
門外漢(Webプログラマ)の自分が一番腹落ちした表現を(雑に)アウトプットしてみます。
詳細は参考にさせて頂いた資料を御覧ください。
結論
MVVMはModel、View、View Modelの略称。
PDSを実現しつつ、View(XAML)の都合を吸収する部分がViewModel。
ModelはUI以外(ビジネスロジックやデータソースへのアクセス等)を担当する。
PDS(Presentation Domain Separation)について
Presentation(UI)とDomain(その他の機能)を分けること。
PDSは以下のような経緯から生まれた(と理解した)。
- UIはテストしづらいので、UI(View)とそれ以外を分けたい
- Viewとそれ以外を分けると理解しやすい
- 見た目の変更がその他の機能に波及しない(しづらい)
- デザイナーとの分業の達成
XAMLについて
AndroidアプリのViewに一般的に用いられるXML言語。
詳しくは公式ドキュメントをどうぞ。
(自分は過去にActionScript3.0でMXMLを触った事があったのでイメージしやすかったです)
ViewModelについて腹落ちしたポイント
以下の2点からViewとなるXAMLに対してはバインディングしたオブジェクトが必要であり、
それがViewModelであると理解。
1.XAMLの特徴(コントロールの状態保持について)
操作に対してコントロールの状態を保持するにはバインディングしたオブジェクトが必須。
無いとスクロールしただけで再描画されて状態が消える。
(チェックボックスのチェックが消えるなど)
2.バインディングしたオブジェクトからのみ操作可能な定義が存在する!
XAMLはXML形式でコントロールの定義が可能だが、
中にはバインディングしたオブジェクトからのみ操作可能な定義が存在する。
【ちなみに】View(XAML)でコードビハインドを使えばオブジェクト不要じゃね?
そうするとViewModelが使いまわせないので一般的にはおすすめしない。
例えば一覧ページと詳細ページで同じViewModelを使いたいのに、
Viewに書いてたら詳細で一覧を参照するかクローンコードにしないといけなくなってしまう。
勉強してみた感想と今後の課題
参考資料はMVVMだけじゃなくMVCなど他のMV◯系パターンの説明もあり、
それを読むとMV◯系はPDSを実現するための方法論でしかないのかなと。
つまり根幹にあるのはPDS。
実際にMVVMで開発する時にちゃんとMVVMに則って開発出来るように実例も見ていきたい。
既にいくつか資料を見てみたけど、まだ自信は持てない感じ…。