C#でMVVMって何でしょう

C#の本や解説サイトを見ていると、C#のWPFプログラムはMVVMというパターンで作るのが作法のようなことが書いてあったりします。本投稿は、MVVMって何だ?というメモです。

目次

  1. Model-View-ViewModel
  2. MVVMでなにか良いことがあるの?
  3. 使う?使わない?

Model-View-ViewModel

定義てきなことはWikipediaに書かれています。プログラムを機能で分割して考えたときに、どこにどのコードを配置するかという指針のようなものです。 WPFでXAMLを使ったプロジェクトですと、プロジェクトを作った時点でXAMLファイルとCSファイルにコードが分かれています。アプリのユーザーへのインターフェースの見た目の部分はXAMLに書き、インターフェースのコード部分はそれだけをひとまとめにしてC#で書き、それ以外のコード(データの保持とかストレージへのアクセスとか)はそれだけをひとまとめにしてC#で書こうというものです。それぞれView、ViewModel、Modelと呼ぶので、頭文字をとってMVVMと呼びます。

モデル

内容

言語

View

アプリの外観部分

XAML

ViewModel

外観の動作(ボタンを押されたらどうするとか、表示するデータの加工とか)

C#

Model

アプリに機能部分(数値計算・画像処理・データベースアクセスなど)

C#

Viewのコントロール(テキストボックスとかボタンとか)とViewModelのプロパティをバインドすることで、ユーザーが外観上の部品を操作したときにViewModelのメソッドが実行されたり、アプリ内部のデータが変更されたときにViewの表示を切り替えたりします。

MVVMでなにか良いことがあるの?

外観と内部を分けるので、並行して作業できます。個人で作ってると並行して作業するというのはあまりないと思いますが、外観をちょいちょいいじっても内部のコードの方への影響が少ないというのがメリットです。 ただし、バインドとかイベントとかが出てきて、私のような素人にはちょっと敷居が高いです。

使う?使わない?

メカの設計でもモジュールに分けて設計したりするので、メリットは理解できます。 小規模アプリを作るだけの一般人としては、敷居が高いなぁと思います。でも、作ったアプリのメンテナンスをろくにしないからこそ、後で見てわかりやすいように、いじりやすいように作るべきであったりもします。忘れた頃に直しが必要になったりしますから。それに、フォーマットを一度覚えてしまえばきっと使い回せるでしょう。というわけで、出来るだけMVVMに沿って作るようにしようと思います。 でも、お手軽にツールを作りたい人からすると、昔より複雑になったなぁと思います。(昔に戻りたいわけではないです。)

公開日

広告