Help us understand the problem. What is going on with this article?

MVVMについて知っておくべき基礎知識

More than 1 year has passed since last update.

この記事について

Swiftで最近のトレンドのデザインパターンであるMVVMについてまとめる記事。追記予定。

MVVMとは

  • Model-View-ViewModelのフレームワーク
  • ViewはViewModelを参照、ViewModelはModelを参照
  • その逆は許されない
  • ViewModelの変更をViewに反映させたい場合に、ReactiveCocoaのBidingが便利。
  • 基本的にはViewModelに変更を加えて、その変更がViewに自動的に反映されるイメージ。

MVVMのそれぞれの役割

Model

  • データの保持と型定義
  • ビジネスロジック
    • UIに依存しない、アプリの振る舞いに関するロジック
    • データベースとの通信など

View

  • UIの出力
  • UIのコンポーネントとViewModelをバインディングする。

ViewModel

  • エラーハンドリング
  • イベントを元にデータをModelから取ってくる。
  • UI出力のためのロジック(プレゼンテーションロジック)
    • ビューの更新やページ遷移
  • ビジネスロジック
    • 原則ビジネスロジックはModelに記載すべきという通説はあるも、ViewModelに記載される場合もある。

MVVMのメリット

Massive ViewControllerが解消される

  • MVVMを使うことで、Controllerが以前抱えていたビジネスロジックをModel、プレゼンテーションロジックをViewModelに移すことになる。よって、ViewControllerが小さくなる。
  • 単一責務の原則が実現しやすくなり、アプリの振る舞いが把握しやすくなる
  • 長いViewControllerのファイルを上下に行ったり来たりする必要がなくなる。

Testがしやすくなる

  • Viewの部分を独立させることで、ビジネスロジックだけをテストすることが可能になる。
  • 表示のためのロジックをViewを見なくてもテストすることができる。

MVVMで起こりうる問題

  • Fat ViewModelとなってしまう。
    • View Modelにロジックを書き込んで行くため、しばしばViewModelが大きなサイズになってしまう。単一責務の原則が果たされなくなってしまう。そんな場合は以下の対策をする。
    • ViewModelを複数のViewModelに分割する
    • ViewModelの責務をModel層に持って行く。
    • 可能な限り、1クラス一つの責務とするのが大事。

参考

https://qiita.com/s_emoto/items/b000a5c076f3d6076972
https://medium.com/flawless-app-stories/how-to-use-a-model-view-viewmodel-architecture-for-ios-46963c67be1b

mercari
フリマアプリ「メルカリ」を、グローバルで開発しています。
https://tech.mercari.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away