##はじめに
MVCモデルについて初学者向けにまとめてみました。ただしMVCは奥が深いのでこの記事を読んだだけでは完璧な理解には及ばないでしょう。なので少しでもMVCの全体像を掴んでもらえたらいいなと思っています。
この記事を読むにあたって前提知識としてCRUD処理がわかっている必要があります。もし分からない方は下記の記事を先に読んでみて下さい。
Web開発のキホン「CRUD」をわかりやすく解説
#目次
・MVCとは
・modelとは
・viewとは
・controllerとは
・なぜMVCを使うのか
・まとめ
##MVCとは
MVCとはmodel, view, controller の略でそれぞれ
model → システムのロジックの部分
view → ユーザーが操作したり、入力をする部分
controller → ユーザーからの入力をmodelやviewに橋渡しする部分
を指します。ただこれだとわかりにくいので今のところは覚えなくて大丈夫です。
そもそもMVCとは機能ではなく概念のことで、別にMVCではなくてもアプリ開発をすることはできます。ただMVCを使い役割ごとに機能を分けて開発をすると良いことが沢山あります。
具体的なメリットは「なぜMVCを使うのか」で解説するのでまずは役割ごとの機能を見ていきましょう!
##modelとは
前述ではシステムのロジックの部分と書いたのですがmodelでは基本的にデータベースとのやり取りの部分を作っていきます。具体的に「作成」「更新」「削除」といった処理を実装します。CRUD処理の「表示」以外ですね。
##viewとは
viewはCRUD処理の「表示」の部分にあたります。
そしてviewではHTMLを「動的」に生成することができます。では動的なHTMLとは何か。
皆さんが知ってるものでわかりやすく例えるとTwitterのタイムラインがあります。タイムラインはアクセス時によって表示順が変わり常にリアルタイムで変動していきますよね。それはアクセスする度にデータベースから最新のツイートを表示するという処理を行なっているからです。このようにアクセスによって表示(HTML)が変わったりするものを動的なHTMLと呼びます。
##controllerとは
controllerは前述ではmodelとviewの橋渡しと記述したのですが、細かく説明するとクライアントからきたリクエストをcontrollerで受け取って受け取った指示をmodelに渡してデータベースからデータを取得それをさらにcontrollerに渡して最後にviewに渡して動的に生成されたHTMLをクライアントに返します。
##流れ
リクエストからレスポンスまでの流れをレストランに例えてまとめてみました。
お客さん(クライアント)からcontroller料理長にオーダー(リクエスト)を頼むと料理長は新人のmodel店員に冷蔵庫(サーバー)から具材を取ってきてと頼みます。そしてmodel店員が持ってきてくれた材料でcontroller料理長はオーダーされた料理(view)を作りお客さん(クライアント)に渡します(レスポンス)。
まとめると
リクエスト→controller→model→controller→view→レスポンス
といった流れになります。
現実世界でもレストランに限らず役割を分けることで効率化や専門性を高めていますよね。
##なぜMVCを使うのか
ここまででmodel,view,controllerについてはある程度理解できたと思いますのでここからはMVCを使うメリット、デメリットについて説明していきます。
####MVCを使うメリット
・役割の応じて専門性の高い仕事が可能。
・「M」「V」「C」でそれぞれ独立性が高いため変更の対応も素早く行える。
・役割をわけることでコードを管理しやすい。
まとめるとMVCと分けて管理することで役割ごとの専門性が高くなり作業効率とクオリティが上がる。またバグの修正やトラブルに応じた変更も素早く行える。
####MVCを使デメリット
・オブジェクトの複数作成が必要で、処理に時間がかかる。
・オブジェクト間のやりとりに制約がかかり、コードを柔軟に記述できなくなる可能性がある。
当たり前ですが開発規模の拡大につれて処理が複雑になり管理が大変になります。それにより結果として修正が困難になる場合があったりします。またMVCフレームワークを使う場合生の言語に比べて制約が多くなったりするのでコードを柔軟に記述できなかったりもします。
##まとめ
お疲れ様です。ここまで読み終われた方はMVCは概念でただ役割を分けているだけであるということはなんとなくわかったはずです。
最後にMVCのメリットデメリットをまとめましたが総合的にMVCは開発者にとって「M」「V」「C」と明確に分割されているため、とても開発しやすくなり快適に仕事が進んだりとメリットの方が多いと言えるでしょう。
冒頭でも話しましたがこれを読んだだけではMVCを理解したとはまだ言えないのであとは手を動かして実際にMVCの概念に触れていくといいと思います。
##参考サイト
Laravelフレームワークで体系的にわかりやすくCRUD処理を実装できる記事を見つけましたのでこの記事を読んだ後にチャレンジしてみることをお勧めします。
Laravel5.6入門 基本CRUD操作を体で覚える