13
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Swift】Swift初心者でも分かるMVVM

Last updated at Posted at 2021-11-21

#はじめに
Swiftを学び始めて1ヶ月が経ち、MVVMというアーキテクチャがあることを知りました。

MVVMって何?MVCと何が違うの?という方向けのためにMVVMについてまとめてみました。

※具体的なコード例はSwiftで書かれているものを参考にしています。

#MVVMはデータバインディングをする

mvvmIllust.jpeg
出典:ソフトウェアアーキテクチャー…?MVCやMVVMってなに!?

MVVMはViewとView ModelとModelからなります。

MVCはViewとControllerとModelからなるので、比較するとControllerとView Modelの部分が違いますね。

この2つの違いはView Modelの方がデータバインディングをするということです。

#データバインディングとは?
データバインディングとは、ViewとView Modelを結び付ける仕組みのことです。
データの値を結び付けるので、データバインディングと呼ばれています。

データバインディングの特徴は、ViewとView Modelどちらかで値が書き変われば、値が変化するたびにViewとView Model、両方の値が変更されるという点です。

これはつまり、ユーザーが画面上で何らかの処理した場合でも、コンピューター上やサーバ上で何らかの処理があった場合でもViewとView Modelそれぞれに変更が反映されるということです。

MVCだとModelから受け取った情報をControllerを介してViewに伝えるのに対して、
MVVMはModelから情報を受け取り、View Modelに情報が反映されることで、自動的にViewにも同じ変更が反映されます。

#MVVMを使った方がいい場面
データバインディングをすることがMVVMの特徴でしたが、このアーキテクチャはどんな場面で有効になるのでしょうか。
MVVMが有効なシーンは、データバインディングを活かすことができるものになります。

データバインディングを行うMVVMは、Viewで変更があっても、Modelで変更があっても、お互いに更新を反映する機能を持っています。
そこで、ユーザーの入力した情報をすぐに反映したり、サーバ側で自動的にデータを更新する頻度の多いサービスでは、MVVMの方が適しているでしょう。

(ちなみにVue.jsはMVVMを採用しています。記事のTodoリストもMVVMの設計でできています。)

#MVVMを実装した具体的なコード

以下にMVVMで記述されたコード例が載っているのでSwiftがわかる方なら目を通してみてもいいかもしれません。
SwiftでMVVMを使うときはシンプルに記述できるということでRxSwiftがよく使われますが、学習コストが高く初心者が理解するのは少し難しかったりします。
なので、RxSwiftを使用していないパターンも載せておきます。

・RxSwiftを使っていないパターン
【Swift】MVVMを勉強してみたPart3

・RxSwiftを使ったパターン
iOSアプリ設計大全集 2016

#終わりに
データバインディングをしているという概念的なもののイメージを掴んでから、
実際のコードを見てみるとMVVMがどんな役割を持ったアーキテクチャーなのかがより理解できたように思います。
MVVMについてより理解を深めたいときは下記の記事も参考にしてみて下さい。

#参考

13
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?