MVCモデルとミドルウェアについて今更まとめてみた
はじめに
MVCとは
MVC(Model-View-Controller)
MVCは、アプリケーションを3つの主要なコンポーネントに分ける設計パターン:
-
Model(モデル):
データとビジネスロジックを管理します。
データベースとのやり取りやデータの検証を行います。 -
View(ビュー):
ユーザーインターフェースを担当します。
データをユーザーに表示し、ユーザーからの入力を受け取ります。 -
Controller(コントローラー):
ユーザーのリクエストを処理し、適切なモデルとビューを呼び出します。
ビジネスロジックを実行し、ビューにデータを渡します。
ミドルウェアとは
リクエストとレスポンスの間に位置するソフトウェアの層。
リクエストがコントローラーに到達する前や、レスポンスがクライアントに送信される前に、特定の処理を行うことができる。
ミドルウェアの役割
-
認証と認可:
ユーザーが特定のリソースにアクセスする権限があるかを確認します。 -
ロギング:
リクエストやレスポンスの情報を記録します。 -
エラーハンドリング:
エラーが発生した場合に適切なレスポンスを返します。 -
データの前処理:
リクエストデータをバリデーションしたり、フォーマットを変換したりします。
MVCとミドルウェアの関係
ミドルウェアは、MVCアーキテクチャの一部として機能し、リクエストがコントローラーに到達する前に特定の処理を行うことで、アプリケーションのセキュリティやパフォーマンスを向上させます。例えば、認証ミドルウェアは、ユーザーが適切な権限を持っているかを確認し、不正なアクセスを防ぎます。
ミドルウェアとMVCのフロー
リクエストがクライアントからサーバーに送信される。
↓
ミドルウェアがリクエストを処理し、必要な前処理(認証、ロギングなど)を行う。
↓
コントローラーがリクエストを受け取り、ビジネスロジックを実行する。
↓
モデルがデータベースとやり取りし、必要なデータを取得または更新する。
↓
ビューがデータをユーザーに表示するためのレスポンスを生成する。
↓
ミドルウェアがレスポンスを処理し、必要な後処理(キャッシング、ロギングなど)を行う。
MVCモデルのメリット
- 分離の原則:
各コンポーネントが独立しているため、開発とメンテナンスが容易。
Viewを変更してもビジネスロジックに影響しないなど
-
再利用性:
モデルやビュー、コントローラーを再利用することで、コードの重複を減らし、効率的な開発が可能。 -
テストの容易さ:
各コンポーネントが独立しているため、ユニットテストや統合テストが容易に行える。
特にビジネスロジックを含むモデルのテストが簡単 -
スケーラビリティ:
アプリケーションが大規模になるにつれて、各コンポーネントを独立してスケールさせることができる。
例えば、ビューのパフォーマンスを向上させるために、フロントエンドの技術を変更することが可能。 -
開発の効率化:
開発チームが各コンポーネントに専念できるため、並行して作業を進めることができる。
デザイナーはビューに集中し、開発者はモデルとコントローラーに集中できる。
余談 一連の動きを人間の脳や体に例えてみた
ミドルウェア(前処理と後処理)
扁桃体や前頭前皮質の一部が情報のフィルタリングと処理を行い、無駄な情報を排除したり、重要な情報に優先順位を付ける。また、処理後に記憶として情報を整理したり、ログとして保存する。
コントローラー(リクエスト処理)
前頭前皮質が情報を意思決定や計画のために処理する。ここで多くのビジネスロジックが実行される。
モデル(データの取得と保存)
海馬が記憶としてデータを保存し、必要に応じて検索して取り出す。この部分はデータベースとのやり取りを担当。
ビュー(レスポンス生成)
視覚野や聴覚野が情報を適切な形で表現し、ユーザーに見える形にする。これは、外部に情報を伝えるための出力。
クライアント(外部の刺激)
外界からの五感(視覚、聴覚、触覚、嗅覚、味覚)を通じて脳に情報が送られる部分。
クライアントの要求や行動として現れる。
ロギング
脳の記憶システムが体験や出来事を記録する機能。例えば、長期記憶として保存されるデータ。
キャッシング
短期記憶や作業記憶が、一時的に情報を保持し、迅速なアクセスを可能にする機能。
つまりワーキングメモリが少ない人は、キャッシングの時間が短い?
認証
脳のセキュリティシステムが、情報の信頼性や安全性を確認する機能。
例えば、未知の情報や危険な状況に対する警戒。
(猜疑心が強い人は認証機能がガチガチみたいでおもろい)
全体像の例え
クライアント(五感の受容器):外界からの刺激
ミドルウェア(フィルタリングと処理):入力情報のフィルタリングと前処理、後処理
コントローラー(前頭前皮質):意思決定とビジネスロジックの処理
モデル(海馬):データの記憶と検索
ビュー(視覚野、聴覚野):情報の表現と出力
ロギング(長期記憶):出来事の記録
キャッシング(短期記憶):一時的な情報保持
認証(セキュリティシステム):信頼性と安全性の確認
Discussion