MVCモデルについて
MVCとは
ソフトウェアをModel,View,Controllerの3要素の組み合わせでシステムを構築していく考え方。
Model
- ビジネスロジックを担当するシステムの本体部分
- データの変更をViewに通知する(Observerパターンを使うこともある)
View
- 表示、入出力といった部分を担当する。
- Modelのデータを取り出してユーザが見る形で表示(Viewがデータを受け取っているわけではない)
Controller
- ViewとModelを制御する(HTTPリクエストを適切なModelに渡す、ViewからのレスポンスHTTPをユーザに返す)
- 自分自身ではロジックの実行はせず、Viewから入力を受け取り、それに応じてModelのロジックを呼び出し、結果をViewに渡す。
- UIからの入力を担当する
- イベントを受け取る。つまり画面上構成するイベントの数だけ処理がある
メリット
- 機能ごとの分離が明確になるため、独立性が確保でき、分業しやすくなる。
- コンポーネント間の依存度を下げることができる。つまり、再利用しやすくなる。
- また、責任が分かれているため、複数人でメンテナンスすることを考えた時、同時に同じ領域を操作する危険が減り保守性も向上する。
Middlewareパターン
特性
- クライアントコードとハンドラの間に割って入り、入力を加工する
- ハンドラとクライアントコードの間に割って入り、出力を加工する
- クライアントコードとハンドラの間に割って入り、入力がハンドラに届く前に、早期に出力を返す
Middlewareパターンとは
Middlewareパターンの目的は、「ミドルウェア」と呼ばれるガワの処理で核となるハンドラを包むことで、プログラム本来の振る舞いを拡張可能にすること。
MVCウェブフレームワークでは、コントローラの入出力となるHTTPリクエストやレスポンスをアプリケーション全体で統一的に加工する用途などに採用されている。
どんな時に使えるか
- HTTPS接続のみを許可し、HTTPで接続されると強制的にリダイレクトする。
- 特定のIPアドレスだけ許可する
- ログインしているユーザーにのみページを表示する
- 特定の言語のみ、特定の国のみページを表示する
- リクエストのログを記録する
LaravelにおけるMiddleware
Laravel Middleware 調べてみた
以下の三種類に分類できる。
- グローバルミドルウェア
- ルートミドルウェア
- コンストラクタ内のミドルウェア
処理の順番は以下の通り。
- グローバルミドルウェア
- ルートミドルウェア
- コンストラクタ内ミドルウェア
- コントローラーの処理
- コンストラクタ内ミドルウェア
- ルートミドルウェア
- グローバルミドルウェア
コントローラーの処理をラップするイメージ。