アプリ開発をする上では、MVCやMVVMなどの設計モデルを理解しておく必要があります。
本記事は、Swiftの初学者がMVCとMVVMの理解を深めるためにアウトプットしていきます。
そもそも、MVCとMVVMとは?
MVCとMVVMもサービスを利用するユーザーに見えることありません。よく使われる言葉として、設計モデルとも呼ばれています。家で例えるなら、分解すると土台があって、外枠・柱があって屋根があります。これらは、それぞれ役割があって、使っている素材が違います。
このように、それぞれの機能や役割を考えて分類しておくと,後で修繕する時に楽だし、リフォームするときも簡単だよねってことです。
では、それぞれの設計モデルを深掘りしていきましょう。
MVCとは?
MVCとは、「Model」「View」「Controller」の頭文字をとったものです。
「Model」
システムの中で、ビジネスロジックを担当
人間で言えば、脳みたいなイメージで、ある処理にたいして計算を行ったり、処理を記憶させていつでも引き出せるような状態にすることができる。
「View」
ユーザーが閲覧できる所で、表示や入出力といった処理を担当。
「Controller」
ユーザーの入力に基づいて、ModelとViewの制御を担当。
人間で言えば、脳に命令したり、脳が処理した内容を足に伝えたり、神経みたいな役割をしています。
これらを図にすると、以下のようになります。
-図の説明-
1.ユーザーがYOASOBIの楽曲を検索したいと考え、アプリ内で検索
2.リクエストをControllerに送信
3.Controllerがリクエストを受け取り、Modelに処理を実行するよう指示
4.Modelが処理を実行。処理した内容をControllerに送信
5.Controllerを介してModelが処理した結果をViewに反映
MVVMとは?
MVCとは、「Model」「View」「ViewModel」の頭文字をとったものです。
「Model」と「View」の役割はMVCモデルと一緒です。
「ViewModel」
ViewとModel間の伝達や状態保持を担当します
MVVMの概念はとても難しいので、以下の図で説明します
-図の説明-
1.ユーザーがYOASOBIの楽曲を検索したいと考え、アプリ内で検索
2.ユーザーからのリクエストに基づいてViewModelにリクエストが送られる
3.必要であれば、リクエストが反映
4.Modelに処理を実行するよう指示
5.Modelの処理をViewModelに渡す
ご助言、ご指摘等ございましたら、是非コメントよろしくお願いします!
データバインディングとは?
MVVMモデルでは、データバインディングという仕組みを使っています。
データバインディングの特徴は、ViewとView Modelのどちらかで値が書き変われば、値が変化するたびにViewとView Model、両方の値が変更されるという点です。
ユーザーが入力した情報と、格納したデータをデータバインディングにて自動的に処理していきます。
MVCとMVVMのメリット・デメリットを理解する
ここが一番重要です。
メリット・デメリットを理解しておかなければ、どちらの設計モデルを採用して良いか判断することはできません。
簡潔に説明していきます。
-MVC-
メリット
・機能毎に分割されているため,分業して作業を進めやすくなる(開発者の得意な所に集中できる)
・それぞれが独立しているので変更・修正があった場合にその影響を受けにくい
デメリット
・仲介役のControllerの負担が大きくなる
-MVVM-
メリット
・Viewに素早くデータを反映することができる
デメリット
・動作の流れが見えづらくなる
・MVCと比べ、分業して作業を進めにくい
まとめ
今回は、MVCとMVVMのついて調べたことをまとめてみました。
MVCモデルは、直感的で理解がしやすい印象でしたが、MVVMは実際に運用してみないと理解しきれない部分が多くあるなと思いました。
MVVMはViewの反映速度が早くなるので、ユーザーにとって印象が変わるくらいの処理速度ならば、積極的に採用していきたいですよね。
本記事は、不十分な部分があると思います。
ご助言、ご指摘等ございましたら、是非コメントよろしくお願いします!
参考文献
ソフトウェアアーキテクチャー…?MVCやMVVMってなに!?
宣伝
元動物飼育員の知見を活かして、好きな動物やイベントのカードをスワイプして、
その結果に基づいた動物園にマッチングするというアプリを開発しました。
https://apps.apple.com/jp/app/zoogo/id1552154924
是非、興味がある方は使ってみてください🙇♂️