🖲️

What is MVVM?

2024/01/08に公開

Model View ViewModel 略すとMVVMは、WPFなどのMicrosoft系の開発において採用されているデザインパターンです。iOS開発だと、Storyboardの頃だと、ViewControllerの肥大化を防ぐ目的で使われていたようです。

https://learn.microsoft.com/ja-jp/dotnet/desktop/wpf/overview/?view=netdesktop-8.0

図にするとこんな感じでしょうか🤔

Model層の役割

アプリケーションで使うデータの基本的な振る舞いやそれに関するロジックを保持します。

  • データの構造の表現
  • Web APIとのやりとり
  • その他データの振る舞いに関するロジック

UIやレイアウトに関するロジックは保持しない。SwiftのRealmというローカルデータベースを使った例だとこのようになっております。

import Foundation
import RealmSwift

// カウンターのモデルを定義する
class Counter: Object, ObjectKeyIdentifiable {
    @Persisted(primaryKey: true) var id: ObjectId
    @Persisted var count: Int = 0
}

View層の役割

モバイルでもWebの技術でも共通ですが、UIを作るのが役割です。ViewModelからデータを受け取ってUIに表示をします。Web APIを使った例だとインターネットネットから渡されたJSONのデータをデコードして、テキストや画像に変換します。

ViewModel層の役割

ModelとViewの間にあって仲介をしてくれるものです。Controllerと似てる気がしますが、違ったりします。僕の知ってるViewModelだと、ロジックはViewModelのクラスには書いてなくて、Repositoryと呼ばれるクラスにロジックは書いて、UIで、ボタンを押すなどの操作が実行されたら、ViewModelを使って、メソッドを呼び出します。

Androidの開発だと、ViewModelが基本みたいなので、学習するのには参考になりそうです。私はRetrofitやRoomを使うときは、ViewModelでコードを書いております。

  • Modelからデータを受け取り、UIに反映できるような形で出力する
  • View側の入力をModelに渡して、UIの更新をする

まとめ

今回はわかりやすく、MVVMについて解説してみました。記事の内容は少ないですが参考になると嬉しいです。

AndroidでのMVVMの記事:
https://zenn.dev/joo_hashi/articles/366e5cb9b44794

Discussion