【エムブイブイエム】

MVVM(エムブイブイエム) とは?

公開:
💡 画面と裏方を「双方向の糸電話」でつなぐ設計パターン
📌 このページのポイント
MVVM パターンの構造 View (画面・UI) テキストボックス ボタン リスト表示 ViewModel (状態管理・変換) name プロパティ saveCommand items リスト Model (データ・ロジック) User エンティティ Repository ビジネスルール データバインディング (双方向) データ取得・更新 表示のみ担当 橋渡し役 データ&ロジック ViewはViewModelだけを知り、Modelの存在を知らない
MVVMの3層構造とデータバインディングの流れ
ひよこ ひよこ
MVCは聞いたことあるけど、MVVMって何が違うの?
ペンギン先生 ペンギン先生
MVCのController(操作の受付係)の代わりにViewModel(画面の状態管理係)がいるんだ。MVVMの特徴はデータバインディングで、ViewModelの値を変えると自動的に画面が更新されるよ
ひよこ ひよこ
データバインディングってどういうこと?
ペンギン先生 ペンギン先生
「画面の入力欄」と「ViewModelのプロパティ」を紐づけておくと、片方を変えるともう片方も自動で変わる仕組みだよ。たとえばテキストボックスに名前を入力すると、ViewModelのnameプロパティが自動更新されるイメージだね
ひよこ ひよこ
ViewModelって結局何をするの?
ペンギン先生 ペンギン先生
Viewに表示するためのデータを整形して保持する係だよ。たとえばModelが「price→ 1000」を持っていたら、ViewModelが「displayPrice→ ¥1,000」に変換してViewに渡すんだ。Viewはただ表示するだけでいい
ひよこ ひよこ
テストしやすいって本当?
ペンギン先生 ペンギン先生
ViewModelは普通のクラスだから、UIを起動しなくてもユニットテストできるんだ。「この値を変えたらこのプロパティがこう変わるはず」というテストを画面なしで書けるのが大きなメリットだよ
ひよこ ひよこ
どのフレームワークで使われてるの?
ペンギン先生 ペンギン先生
元祖はMicrosoftのWPFだけど、今はSwiftUI、Jetpack Compose、Vue.jsのComposition APIなど、リアクティブなUIフレームワークの多くがMVVM的な考え方を採用しているよ。フロントエンド開発では避けて通れないパターンだね
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「MVVM」って出てきたら「画面とロジックをデータバインディングでつなぐ設計パターン」と思えればだいたいOK!
📖 おまけ:英語の意味
「Model-View-ViewModel」 = モデル・ビュー・ビューモデル
💬 2005年にMicrosoftのJohn Gossmanが提唱したパターンで、WPF(Windows Presentation Foundation)のデータバインディング機能を活かすために生まれたんだよ
← 用語集にもどる