Objective-C
Swift

MVCモデルについて

MVCモデルについて整理したいと思い,いろいろ調べたのでその内容を記事にしたいと思います.

MVVMについても記事書いてみました。良ければ見てみてください。

MVVMについて


MVCモデルとは

役割ごとにModel, View, Controllerに分割してコーディングを行うモデル

それぞれの役割は,


  • Model --> システムの中でビジネスロジックを担当する


  • View --> 表示や入出力といった処理をする


  • Controller --> ユーザーの入力に基づき,ModelとViewを制御する


概念図としては次の図1のようになる.

MVCモデル図.png

図1 MVCモデルの概念図

(出典:http://www.slideshare.net/MugeSo/mvc-14469802)

※上記の概念図はiOS向けではなかったらしく,次の記事をご参考にされることをオススメします.

http://qiita.com/lovee/items/5f55422f6b55d968bbdc

以下,この記事からの引用です.

「Model は本来一まとまりのデータ処理をする部品であって、その性質ゆえ内部が非常に複雑な実装が入ったりいろんなメソッドやプロパティがアクセス可能になってたりしており、一つだけでなく複数の View クラスの必要なデータを対応してるのが一般的です。そのため View が直接 Model 参照するということは、すなわちView が自分が必要としないプロパティやメソッドのアクセスまでできてしまう

このような理由からViewがModelを直接参照するのはあまりよろしくないということでした.


MVCモデルの処理の流れ

上記の内容を受けて,ユーザーからの入力があった場合の処理の流れを自分なりに図にしてみました.以下の図2です.

MVCの処理の流れ.png

図2 ユーザーからの入力があった場合のMVCモデルでの処理の流れ

私の理解としては,


  • Model --> 実際にデータの処理を行う


  • View --> Modelの状態を表示する


  • Controller --> ModelとViewに処理をお願いする


といったところです.MVCモデルを参考にする前と後で特に違いが出る点として,


  • ControllerはModelとViewの操作だけを記述すれば良いため肥大化を避けることができる.


  • Viewはもらった値を表示するのではなく,Modelを参照してModel内のデータの状態を表示する.


の2点が挙げられると感じました.


MVCモデルの利点

1.機能毎に分割されているため,分業して作業を進めやすくなる(各人の得意な所に集中できる)

2.それぞれが独立しているので変更・修正があった場合にその影響を受けにくい

今回の記事は以上になります.

この記事を書くにあたって,MVCモデルについてもう一度調べたことで自分の中で整理ができました.

間違っている点や理解が不十分な点等,ご指摘いただければ幸いです.