##はじめに
どうも、未経験からエンジニア転職を目指しているもきおです。
これは当時プログラミングスクール卒業したての頃、エンジニア採用面接でのお話
面接官「えーそれではMVCモデルを説明してもらえますか?」
もきお(はい、来たその質問。)「モデル,ビュー,コントローラーの略で情報処理をこれら3つで分割して行うモデルのことです。コントローラーが情報を受け取り、DBとの連携が必要な場合はモデルとやりとりを行います。その後、必要な情報をビューに表示させるという流れです」(よし、ちゃんと言えた。ドヤっ)
面接官 「えーじゃあMVCモデルをここにいるIT知識の乏しい人事の方にもわかるように説明してみてもらえますか?」
もきお(おっと、その展開は聞いてない。)
こんな感じでその企業からは内定はいただけたのですがMVCモデルをIT知識があまりない方に対しても分かりやすく伝える事ができず、悔しい思いをしました。
ここで今回はMVCモデルを分かりやすく伝えるためにはどうすれば良いか考えていきたいと思います。
##MVCそれぞれの役割
まず改めてMVCそれぞれの役割を復習したいと思います。
###・Model
データベースに対して、データの登録や取得、更新、削除などの処理を行う部分。
データベースのデータが必要になる際に機能する箇所
###・View
PCの画面(ユーザインタフェース)に関わる部分。ブラウザに表示させるHTMLを実際に組み立てる。画面上で入力された情報を受け取り、コントローラーに情報を受け渡す部分でもある。
###・Controller
モデルやビューを統合的に制御する部分。ユーザーからのリクエストを受けて、Modelと連携したり、どの画面(View)を表示するのかといったことを制御する。言わば司令塔のようなもの?
図1:MVCモデル図 下記リンクより引用
基本Controllerを介してModelを参照しViewへ返す流れですが、直接ViewからModelを参照した方が良くない?ということで図ではViewがModelを参照しており、そのことをPull-MVCと言われるのらしいです。
しかし、Pull-MVCを素朴に実装しようとしたら、ブラウザから頻繁に問い合わせをかける必要があります。よって他にもデメリットはありますがあまりPull-MVCは使われないみたいです。
下記リンク参照
##さて、分かりやすい説明を考えてみる
基本的にはブラウザからWEBアプリケーションにアクセスし画面に表示されるまでの流れをMVCを使用して説明するのが分かりやすく説明できるのかなと思います。
ブラウザからWEBアプリケーションにアクセスしようとするとControllerへリクエストが送られます。表示するページに必要なデータがある場合、Modelへデータベースのからデータを取ってくるようControllerが指示し、場合によりデータのやりとりを行います。次にControllerはViewへ表示するページのViewファイルを探しにいき、それをブラウザへ返しアクセスしたページを参照できるという流れです。
うーん分かりやすく説明できていない気がする。笑
もっと例えるとYahooのトップページが見たくてYahooのトップページにアクセスしようとするとControllerがトップページのデータをModelを介して取ってきた後にViewファイルからトップページのViewを探し、それをアクセスしたユーザーの画面に表示するって感じ?
分かりやすく説明するのって難しいですね。
##MVCモデルでアプリケーションを作成しないとどうなる?
ところでMVCモデルでそれぞれ役割を分けて作成しないとどのようなデメリットがあるのでしょうか?
・一つのプログラムに全ての処理を記載してしまう可能性がある
・機能追加の際、変更箇所を探すのが大変になる
役割を分担しないので画面上でデータを受け取る処理、データベースを操作する処理、データベースから受け取ったデータを画面に表示させる処理などを全て一つのプログラムファイルの中に記載することになり、チームで開発する際に開発を分担するのも難しくなるし、プログラム変更があった場合に変更箇所が特定するのが難しくなってしまいます。
##あとがき
今回はMVCモデルを分かりやすくどう説明するかについて考えてみました。
まだまだ納得のいくような説明ができませんでしたがMVCモデルについて理解を深められたので良かったです。
また、より理解を深めてから記事にしてみたいと思います。