PHP
Web
初心者
mvc

図解!どのサイトを見てもわからなかった人のためのMVC

MVCとは

UIを持つアプリケーションソフトウェアを実装するためのデザインパターンである。
MVCではプログラムをModel、View、Controllerの3つに分割して書くことで機能の独立化・可読性の向上を図ることができる。

MVCを調べるとこんな感じの説明がでてきたと思います。
でも最初はピンとこないかもしれません。「デザインパターン?」「機能をなんで独立させなくちゃいけないの?」「結局なんのためにMVCにするの?」

今回は10サイトくらい見ても結局わからなかった人のためになるべく難しい言葉を使わずに、図解してわかりやすくMVCについて説明していきます。

日常生活に即して例をみていきましょう

一旦プログラムから離れて、わかりやすいところからMVCについて解明していくことにします。

おじさんのレストラン

子供のころから自分の店を開くことを夢見ていたおじさんが、ついにレストランを開業しました。
restaurant.jpg

お客さんが来店したら注文を聞いて、料理を作って、提供して、お会計もして、、、。
おじさんの料理はとても美味しいので大盛況。今日も大忙しです。

順調に見えたレストランでしたが、ここでひとつ問題が起きてしまいました。
人気店になってしまっておじさん一人ではとてもお店を回しきれなくなってしまったのです。

そこでおじさんは新しく従業員を雇うことにしました。
「人数が増えれば問題ない!」そう思ったおじさんでしたがさらに問題は続きます。

restaurant (4).jpg
みんな好き勝手にやりたいことをやってもうお店がごちゃごちゃです。
誰がなにをするのか、どんな役割なのかがなにも決まっていないからです。
こんな状況じゃさらに人を雇って人数を増やしても混乱するだけですね。

ここまで整理してみましょう

おじさん一人でこじんまりお店をしていたときは問題ありませんでした。
しかし、お店が繁盛して従業員がする作業が増えると、役割もきまっていないのでお店がごちゃごちゃになってしました。

これをプログラムに置き換えて考えて見るとどうでしょう。

簡単な機能でコードの量も少ないときは特に問題は起きませんでした。
しかし、機能が複雑化し開発も大規模になってくると、、、?
どの処理がどこに書いてあるかが明確で、機能ごとにプログラムがまとまりをもっていないとコードをみてもどんな処理をしているのかがまったくわかりませんね。

レストランをMVC化

それではどうしたらこの状況を改善できるでしょうか。
簡単ですよね。それぞれの作業を役割で分けてあげればいいのです。
restaurant (2).jpg

  • お客さんの対応をするウェイター(View)
  • ウェイターとやりとりをし、厨房に指示を出すマネージャー(Controller)
  • マネージャーからの指示で料理をつくるコックさんたち(Model)

このように役割分担したら効率的にお店を回すことができます。
それぞれの担当作業が分割されているので、バイトを増やすときもそれぞれのポジションにうまく割り当てることができます。

プログラムで考えてみよう

上の図を見た上でもう一度プログラミングにおけるMVCの役割を確認しましょう。

View

  • UIの表示
  • ユーザーからの入力を受け取る
  • データをユーザーに対して出力する

Controller

  • データの受け渡し
  • 処理を行うModelや表示するViewを決定

Model

  • DBのデータ操作処理
  • ビジネスロジックの実行

前よりもイメージが湧いたんじゃないでしょうか?

MVCの利点

MVCモデルを活用すれば各処理の独立性が高くなり、仕様変更等がある場合により柔軟かつ簡単に対応できるとよくかいてありますが、どういうことでしょう。
レストランを例に見てみましょう。

restaurant (3).jpg

例えば、洋食のレストランから和食レストランにしたいと思ったら、、、
和食をつくれる料理人を雇えばいいですよね。

例えばさらに大幅に路線変更してメイドレストランにしたければ、、、

restaurant (1).jpg

ウェイターをメイドさんにすればいいですよね。
役割がわかれているからこそ、変更したい部分のみを変えればあとはそのままに大幅な変更をすることができますね。

プログラムでも同じです。
UIを変えたければViewのみ変えればいいし、処理のフローを変えたければControllerのみを変えればいいし、
これが仕様変更や改修に柔軟に対応できるということです。

他のサイトを調べてみよう

ここまでこればもうMVCの大枠の理解はできているかと思います。
いろんなサイトを調べてもピンとこなかった内容が今ならすんなり入ってくるはずです。
今回はわかりやすくするためにいろいろ省いた部分もあるのでそこは改めて調べて確認してみてください。