MVCは現在でも頻繁に利用されますが、当初はUI設計のための設計パターンとして用いられてきました。現在のWebアプリケーションのサーバサイドで用いられるMVCは、もともとのMVCパターンをサーバサイドに適用したものでMVC2と呼ばれ、モデルからビューに対して変更を通知する、もともとのMVCにあった処理はサーバサイドにはありません。LaravelでのMVCはこのMVC2を指すものです。
MVCとは
MVCとは、『Model』『View』『Controller』の略です。
複雑になりがちなプログラミングの処理を3つの役割・機能に分割して実装するデザインパターンの1つです。
MVCの概念は『機能によってプログラムの中を切り分けて記述する』というものになります。
MVCモデルでアプリケーションを開発することにより、より効率よく開発することが出来ます。
このページでは、『MVC』の掲げる『Model』『View』『Controller』を1つずつ解説していきます。
Modelについて
Modelとは、データベースを操作する処理を想像するシーンも多いですが、本来はビジネス要求やサービス仕様を模範し、具象化したものでビジネスロジックを解決する処理グループのことです。
小さなアプリケーションでは、データベース構造がそのままビジネス要求と結びつくケースも多く、データベースそのものになる場合もありますが、データベースを操作するのがモデルではありません。
ビジネスロジックとは、データベース上のデータに対する処理手順。そのシステムにおける仕事部分のこと。
Viewについて
ビューとは一般的にブラウザに表示されるものを指し、Bladeテンプレートをビューと捉えることも出来ますが、テンプレート自体はフレームワーク内部でIlluminate\Http\Responseインスタンスを介して出力されます。
テンプレートはビューを構成する要素の1つで、コントローラで返却するインスタンスはBladeテンプレートのみではありません。ビューを返却する際に、特定のHTTPステータスやヘッダーを返却する場合はResponseクラスも利用し、コントローラで定義する必要があります。
Controllerについて
laravelの開発はまずコントローラを作るところから始まるとも言われている。
Laravelにおけるリクエストとレスポンスの一連の動作は、Illuminate\Routing\Routerクラスが制御しています。標準で用意されているいくつかのコントローラは、実際にはRouterから指示をもらい(ディスパッチ)実行しているクラスに過ぎず、コントローラを担当するグループの1つであることがわかります。
このコントローラはURLに対応するアクションメソッドを持ちますが、フレームワーク内部では、コントローラクラスを強制しているわけではなく、事前にroutes配下のweb.phpファイルなどでURLと対応するクラスであれば、どんなクラスが実行されてもレスポンスを返却する処理が行われます。
Laravelではリソースコントローラと呼ばれるCRUD、「Create」(生成)、「Read」(読み取り)、「Update」(更新)、「Delete」(削除)に対応するメソッド(アクション)がありますが、あくまでコントローラクラスの雛形とルーターの定義がまとめてできる機能に過ぎません。
Laravelではルーターからディスパッチされる処理をメソッドとして記述し、そのいくつかをまとめたものがコントローラクラスと呼ばれています。
ADR(Action Domain Responder)
ADRは、元来のMVCをもとにサーバサイドへ適応したMVC2と同様、MVCをネットワーク上のリクエスト・レスポンスを扱うサーバサイドアプリケーション向けに、より洗練された設計パターンとして提唱されたものです。
この話はまた今度しましょう。それでは、また・・・。
コメントを残す