#概要
MVCの理解がぼんやりと出来てきたような気がするので、
イメージしやすいようにまとめてみました。
#MVCって何?
IBOutletでボタンなどのUIパーツを接続したり、ボタンをタップした際の処理、
API通信などの様々な処理を全てViewControllerに書いてしまうと、ViewControllerに膨大な行数のコードが書かれることになってしまい、コードを追ったり修正したりすることなどが難しくなってしまいます。俗に言うFat ViewControllerです。
このような問題を解決するために、責務の切り分けという作業を行う必要があります。様々なアーキテクチャが存在します。今回はそんなアーキテクチャの中でMVCに焦点を当てて解説してみます。
現在よく使われているMVCパターンはcocoa MVCと呼ばれるものです。
MVCとは、
ModelのM, ViewのV, ControllerのCを合わせてMVCと言っています。
#Modelの役割
Modelの役割としては、
・データ構造の表現
・WebAPIとのやり取り
・ローカルデータベースなどのデータの永続化
・データの振る舞いに関するロジック
が挙げられます。
#Viewの役割
Viewの役割は、
・UIの表示
・Controllerからデータを受け取り、UIに反映させる
・ユーザーの操作を(IBAction,IBOutletなどによって)認知し、
です。つまり、アプリ上でボタンを押す、textFieldをタップして文字を入力するなどの操作を行うと、
Viewに通知されます。
実際にアプリ開発を行う際にはカスタムViewを作成し、Viewとする場合が多いです。
#Controllerの役割
Controllerの役割は、
・Modelからデータを受け取り、Viewに渡してデータを更新
・ユーザーインタラクションをViewから受け取り、適切なアクションを行う
・ライフサイクル処理や画面遷移などの処理を行う
です。cocoa MVCでは Viewcontroller が Controller となります。
#参考になった説明
・ModelとViewは、お互いのことを知らない
・Modelの役割は、viewとControllerがやらないこと全部と考えても良い
・カスタムViewを含むViewは、ユーザー操作をControllerに伝達し、Controllerの要求に応じて
情報を表示するのみの"アホな"存在であるべき
#まとめ
以上の説明を図にすると、以下のようになります。
①ユーザーがView上のUIパーツを操作
②その通知を元にControllerがModelを更新
③ModelがControllerに通知
④Modelから通知をControllerが受け取ったことで、ViewのUIを更新
といった流れです。
自分も学習したばかりなので、不明点や間違っている点があれば教えていただきたいです。
サンプルコード等は後日更新予定です。
最後まで読んでいただき、ありがとうございました!
#参考記事
https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html