アジェンダ
- MVCモデルとは何か概念を理解する
- 具体例を用いてMVCモデルを言語化する
MVCってなんぞ
Model-View-Controller (MVC、モデル・ビュー・コントローラ) はUIを持つソフトウェアに適用されるソフトウェアアーキテクチャの一種である。
「Model View Controller」出典: フリー百科事典『ウィキペディア(Wikipedia)』
要はソフトウェア開発における設計手法のひとつ。PHPという言語は簡単で自由が故、開発者毎にコーディング規約や設計方針が異なるので、全体おおよそで設計手法を統一して設計するときに使われる考え方のひとつ。
ただやみくもにコーディングしていくのではなく、プログラムを設計する際にパーツを分けて実装していく。その分かつパーツが、[Model][View][Controller] で、頭文字をとってMVCモデルと言われる。
例えば掲示板サイトを開発するにあたって、ユーザーに投稿フォームを表示させる画面機能や、投稿されたデータを取得してDBへ登録する処理機能、すでにDBに登録されているデータを何かしらの条件で抽出して取得する機能、取得したデータをユーザーに表示させる画面機能など、ひとつに掲示板サイトを開発するとしても様々な機能開発が必要。
これらをルールに則ること無くドンドコドコドコ実装していくのではなく、ユーザーに画面を表示している部分、データの受け取りと受け渡し及び加工を行う部分、データ取得や保存などDBとのやりとりを行う部分と、役割を分離させて実装させていく事で、保守性や開発効率の向上を期待できる。
一般的には以下。
-
Model
データ取得や保存などDBとのやりとりを行うパーツ -
View
ユーザーに表示させる画面やUIを作るパーツ -
Controller
データの受け取りや受け渡し及び加工を行うパーツ
これらの役割分担を行う開発手法であるMVCモデルは、多くのフレームワークで採用されている。PHPで言うところのLaravel、cakePHP、CodeIgniterなど。RubyではRuby on Rails、PythonであればDjango、JavaであればSpring Framework、などなど…
例えば
掲示板サイトを具体例にMVCモデルを視覚化してみる。
前提条件
- keijiban.comという情報投稿WEBサービスが存在する
- 一意のkeijiban.com登録ユーザーがマイページを表示するためにマイページへアクセスする
- Controllerにはマイページに必要なデータをModelから取得するロジックと、Viewへ値を渡すロジックが実装されている
- View で制御する templateにはマイページを表示させるhtmlが実装されている
-
Modelにはユーザー情報が保存されているテーブル、投稿情報が保存されているテーブルとのやりとりを行うロジックが実装されている
何が起こっているのか
左側のレクタングルは一意のユーザーで、右側のレクタングルはkeijiban.com内の実装で動いているMVCモデルでのサーバーサイドの処理。
マイページへアクセスすると、まずRoutingという機能で、クライアントのリクエストによって実行するサーバーサイドの処理を分岐、呼び出す。(※本投稿では説明を一切割愛していますが、簡単な概念は以下でまとめています。)
今回のRoutingによって呼び出されたControllerは、アクセスしたユーザー情報や投稿情報を取得したいので、Modelからデータ取得を行う。呼び出されたModelは、DBとのやりとりを実行し、Controllerへデータを渡す。Controllerは必要なデータを取得することができる。
その後、ControllerはViewへ取得したデータを渡し、ユーザーのマイページを表示させる処理を実行させる。呼び出されたViewは、指示されたtemplateファイルによりマイページを表示させ、取得したデータを受けて正しいマイページを表示させる。
結論
処理の役割を明確に区分することで、冒頭に記載したメリットを享受できるだけでなく、システム内で何が起きているか、どこで処理が実行されているか、データの受け渡しはどのように実施されているかを具体的にイメージすることができる。
これはシステム全体の理解や、データベースの理解につながると思っているので、難しくてもサーバーサイド側の技術を学ぶ上でMVCモデルの概念を理解するのは必須科目だなと感じた。
おわりに
Laravelで実装している上で、MVCモデルの理解が必須となった理由は、データの受け渡しのロジックを言語化したいため。ほぼ、この世に存在しているWEBサービスはデータの管理をRDBで行っていると想定しているが、データの取得や抽出及び管理には複雑なリレーションの定義が必要。その前提条件にMVCモデルの理解が必要だと思っているのでまとめてみました。
今回はここまで。
お時間頂きありがとうございました。