概要
MVCモデルとは、プログラムの処理を以下の3つの役割に分類して開発するモデル。
- Model
- View
- Controller
それぞれの頭文字を取ってMVCモデルと呼ばれる。
router は 、MVCモデルではControllerの一部として考える事もできる。
MVC + router の役割
以下、それぞれの役割をまとめる。
Model
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F665389%2Ffbf6d788-31bf-304f-a2bc-23b2e6da43ef.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7959d65c11cf2696f0b3dc96a3cfa452)
ビジネスロジック(=様々な処理を実際に実行するロジック)を担当。DBを操作する役割を担っている。
具体的には、
- データをDBへ保存
- DBからデータを取得
- DBのデータの更新や削除
などの役割がある。基本的にDBを直接触るのはModelだけ。
データ処理(DBから取得したデータの変換など)を含む場合もあるが、DBを操作するイメージが強いため、Logicというディレクトリを作成してデータ処理のプログラムを切り離すこともある。
上司(Controller)からの司令を受けて走り回るパシリ的な役回り。
View
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F665389%2Ff567e0aa-5567-4ddf-f8b6-a0281e817f82.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e7194ce89a487b521653612ab43a8fcc)
ユーザーが実際に見る出面を担当。動的なサイト(ex. Twitter, ブログサイト, etc…)の出面を表すことが多い。表示や入出力を担っている。
- Controllerから受け取ったデータ(レスポンス)を画面に表示
- ユーザーからのリクエストをControllerへ送信
などを行ってる。ユーザーが触れられるのはViewだけ。
ユーザーの言うことを聞いたり上司(Controller)の指示に従ったりする受付の人。
Controller
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F665389%2F5bbeead2-4b0e-45fe-87ef-90ac597d62dd.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=355e2e6ea277c54e0d0e59a3f28bc7c3)
ModelとViewを制御する司令塔を担当。ユーザーの入力に基づいてModelとViewに指示を出す。
- Viewからリクエストを受け取ってModelに指示出し
- Modelの処理を受け取ってViewへレスポンス
などを行う。
部下(ViewやModel)に指示を出すだけで自分は動かない上司。
ルーター(router)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F665389%2F548bb095-7d8d-e0a1-e842-36413b3df4aa.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=2cda9f647abb97a989590fadd3bbc71f)
処理の振り分けを担当。httpアクセスが来たときにどのように処理するかを決めて適切なControllerにアクセスを流している。MVCモデルではControllerが受け取りもやるのでControllerに内包されているとも言える。
もしControllerとrouterを切り分けるとすれば
- Viewからのリクエストを受け取って、適切なControllerに受け渡し
が主な役割になる。
Controllerを補佐する秘書のようなもの。