BackacheEngineerの技術的な備忘録

技術系でいろいろ書けたらなーと

xaml やるうえで把握しておきたいMVVM

xaml とか勉強してると何かと出てくる Model - View - ViewModel ( MVVM ) という構造は把握しておきたいんで、 とりあえず今のところの知識をまとめておく(アウトプット大事)。

目次

MVVMって何ぞや

冒頭にも書いた MVVM はいわゆるデザインパターン的なもの。アプリケーションが下記3つのレイヤー(層)に分割されて構成される。

レイヤー名 説明
モデル( Model ) データと生のコンテンツを処理するレイヤー。ファイルや Web サービスからデータを取得して管理する部分。
ビュー( View ) コントロールとグラフィックスを表示するレイヤー。 XAML で書くところ。
ビューモデル( ViewModel ) モデルとビューの間にあるレイヤー。モデルのデータやコンテンツをビューに提供しやすい形式に変換する。

MVVM の内容から、下記のような関係性にあり、View 側から Model 方向への一方通行で呼び出し等が行われる。

    View  -  ViewModel  -  Model

ユーザを加えるとこんなん。

    ユーザ  -  View -  ViewModel  -  Model

モデルはきっちり View と切り離して実装することになる。これは予測だけれど、たぶん ViewModel が一番ぐちゃぐちゃになる。 View の表示が遅い(ViewModel側の変換が遅いなど)なんてことにならないように、UI スレッドとは別スレッドで処理したり、制御をUI スレッドに戻さないといけないから。

View 側も View だけに絞って書かないといけない。つまり、できうる限り XAML だけにして内部コードが内容するのがいいのかな? それを実現するためにも、XAML の Command の知識は欠かせない。Command によって、イベントを書かずに済むからだ。

MVVM で実装するうえで大事になること
  • ビューとビューモデルのやり取りは「データバインディング」と「Command」でやるべき
  • Model から View への呼び出しはイベントを除いてNG
  • できうる限り View は XAML のみで構成し、内部コードが存在しないように
  • 小さなプログラムで MVVM を適用すると冗長なコードになりがち。逆に、大規模ならやるべきことが分離されているので非常にいい(はず)