MVCモデル(Model View Controller)とは、プログラムを「データ」「見た目」「制御」の三つの役割に分けて作る、設計の考え方のことです。Webアプリの組み立て方として広く採用され、多くのフレームワークがこの形を土台にしています。
現実世界に例えると、MVCモデルはレストランの役割分担のようなものです。食材を管理する担当、料理を盛り付けて出す担当、注文を聞いて厨房へ回す担当。一人ですべてを抱えるより、人の入れ替えも手順の改善もずっと楽になります。
三つの役割
| 名前 | 日本語 | 受け持つこと |
|---|---|---|
| Model | データ | 保存や取り出し、業務上の決まりごと |
| View | 見た目 | 画面の組み立てと表示 |
| Controller | 制御 | 要求を受けて両者に振り分ける |
なぜ分けるのか
混ぜて書くこともできますが、後が続きません。画面のデザインを変えたいだけなのに業務の処理まで触ることになり、直すたびに別の場所が壊れます。役割を分けておけば、変更の影響が及ぶ範囲を限定でき、担当者を分けて並行して進めることもできます。
Modelはデータと決まりごと
三つのうち中心にあたる部分です。データベースとのやり取りや、「在庫がゼロなら注文できない」といった業務上の決まりごとを受け持ちます。画面のことは一切知りません。だからこそ、見た目が変わってもここは作り直さずに済みます。
Viewは見た目だけ
利用者の目に触れる部分です。受け取ったデータを、HTMLの形に組み立てて表示します。ここで計算や判断をさせないのが原則で、「渡されたものを並べるだけ」に徹するほど、デザインの変更が楽になります。
Controllerは交通整理
両者をつなぐ役です。利用者からの要求を受け取り、必要な処理をModelに頼み、返ってきた結果をViewへ渡します。自分では計算も表示もしません。仕事は振り分けだけ、と考えておくと役割がぶれずに済みます。
処理の流れ
一連の動きは決まっています。ボタンが押される、Controllerが受け取る、Modelがデータを用意する、Viewが画面を組み立てる、利用者に表示される。この一方向の流れを守ることが、崩れにくい構造につながります。
Controllerは太りやすい
実際に作ると必ず起こる問題です。どこに置くか迷った処理がControllerに集まり、次第に膨れ上がっていきます。「太ったController」と呼ばれ、避けるべき状態とされています。業務の決まりごとはModel側へ寄せる、という判断を徹底することが要になります。
派生した考え方もある
MVCを土台に、いくつもの変形が生まれました。ModelとViewの結び付け方を変えたMVVMや、Controllerの役目を細かく分けたMVPなどです。名前は違っても、役割を分けて変更に強くするという発想は共通しています。

コメント