C#でMVVMって何でしょう
C#の本や解説サイトを見ていると、C#のWPFプログラムはMVVMというパターンで作るのが作法のようなことが書いてあったりします。本投稿は、MVVMって何だ?というメモです。
目次
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に沿って作るようにしようと思います。 でも、お手軽にツールを作りたい人からすると、昔より複雑になったなぁと思います。(昔に戻りたいわけではないです。)
公開日
広告
C#カテゴリの投稿
- C#でMVVMって何でしょう
- C#でPDFを表示する(WPF)
- C#でアプリのログを記録してみる
- C#でアプリの設定を保存する
- C#でインスタンスをプログラムで作ってみた(Activator.CreateInstance編)
- C#でインスタンスをプログラムで作ってみた(Type.InvokeMember編)
- C#でインスタンス間のデータの受け渡しをしてみた
- C#でウェブサイトのソースを取得してみた
- C#でエラーの処理をする
- C#でクラスのフィールド宣言とコンストラクターでの初期化はどっちが優先する?
- C#でスタックを使って逆ポーランド記法の計算をしてみた
- C#で数式を中置記法から後置記法(逆ポーランド記法)に変換してみた(三角関数編)
- C#で選択(switch-case編)
- C#のWPFでデータバインディング
- C#のXAMLでメニューとステータスバーのレイアウトをしてみた
- C#のアプリの情報を表示してみた
- C#のクラスとインスタンスとオブジェクト
- C#の反復処理(foreach編)
- C#の命名規則
- C#へのMicrosoft.TeamFoundation.Controlsの参照の追加について