🐶

MVCモデルとミドルウェアについて今更まとめてみた

2024/12/27に公開

はじめに

MVCとは

MVC(Model-View-Controller)
MVCは、アプリケーションを3つの主要なコンポーネントに分ける設計パターン:

  1. Model(モデル):
    データとビジネスロジックを管理します。
    データベースとのやり取りやデータの検証を行います。

  2. View(ビュー):
    ユーザーインターフェースを担当します。
    データをユーザーに表示し、ユーザーからの入力を受け取ります。

  3. Controller(コントローラー):
    ユーザーのリクエストを処理し、適切なモデルとビューを呼び出します。
    ビジネスロジックを実行し、ビューにデータを渡します。

ミドルウェアとは

リクエストとレスポンスの間に位置するソフトウェアの層。
リクエストがコントローラーに到達する前や、レスポンスがクライアントに送信される前に、特定の処理を行うことができる。

ミドルウェアの役割

  1. 認証と認可:
    ユーザーが特定のリソースにアクセスする権限があるかを確認します。

  2. ロギング:
    リクエストやレスポンスの情報を記録します。

  3. エラーハンドリング:
    エラーが発生した場合に適切なレスポンスを返します。

  4. データの前処理:
    リクエストデータをバリデーションしたり、フォーマットを変換したりします。

MVCとミドルウェアの関係

ミドルウェアは、MVCアーキテクチャの一部として機能し、リクエストがコントローラーに到達する前に特定の処理を行うことで、アプリケーションのセキュリティやパフォーマンスを向上させます。例えば、認証ミドルウェアは、ユーザーが適切な権限を持っているかを確認し、不正なアクセスを防ぎます。

ミドルウェアとMVCのフロー

リクエストがクライアントからサーバーに送信される。

ミドルウェアがリクエストを処理し、必要な前処理(認証、ロギングなど)を行う。

コントローラーがリクエストを受け取り、ビジネスロジックを実行する。

モデルがデータベースとやり取りし、必要なデータを取得または更新する。

ビューがデータをユーザーに表示するためのレスポンスを生成する。

ミドルウェアがレスポンスを処理し、必要な後処理(キャッシング、ロギングなど)を行う。

MVCモデルのメリット

  1. 分離の原則:

各コンポーネントが独立しているため、開発とメンテナンスが容易。
Viewを変更してもビジネスロジックに影響しないなど

  1. 再利用性:
    モデルやビュー、コントローラーを再利用することで、コードの重複を減らし、効率的な開発が可能。

  2. テストの容易さ:
    各コンポーネントが独立しているため、ユニットテストや統合テストが容易に行える。
    特にビジネスロジックを含むモデルのテストが簡単

  3. スケーラビリティ:
    アプリケーションが大規模になるにつれて、各コンポーネントを独立してスケールさせることができる。
    例えば、ビューのパフォーマンスを向上させるために、フロントエンドの技術を変更することが可能。

  4. 開発の効率化:
    開発チームが各コンポーネントに専念できるため、並行して作業を進めることができる。
    デザイナーはビューに集中し、開発者はモデルとコントローラーに集中できる。

余談 一連の動きを人間の脳や体に例えてみた

ミドルウェア(前処理と後処理)
扁桃体や前頭前皮質の一部が情報のフィルタリングと処理を行い、無駄な情報を排除したり、重要な情報に優先順位を付ける。また、処理後に記憶として情報を整理したり、ログとして保存する。

コントローラー(リクエスト処理)
前頭前皮質が情報を意思決定や計画のために処理する。ここで多くのビジネスロジックが実行される。

モデル(データの取得と保存)
海馬が記憶としてデータを保存し、必要に応じて検索して取り出す。この部分はデータベースとのやり取りを担当。

ビュー(レスポンス生成)
視覚野や聴覚野が情報を適切な形で表現し、ユーザーに見える形にする。これは、外部に情報を伝えるための出力。

クライアント(外部の刺激)
外界からの五感(視覚、聴覚、触覚、嗅覚、味覚)を通じて脳に情報が送られる部分。
クライアントの要求や行動として現れる。

ロギング
脳の記憶システムが体験や出来事を記録する機能。例えば、長期記憶として保存されるデータ。

キャッシング
短期記憶や作業記憶が、一時的に情報を保持し、迅速なアクセスを可能にする機能。
つまりワーキングメモリが少ない人は、キャッシングの時間が短い?

認証
脳のセキュリティシステムが、情報の信頼性や安全性を確認する機能。
例えば、未知の情報や危険な状況に対する警戒。
(猜疑心が強い人は認証機能がガチガチみたいでおもろい)

全体像の例え
クライアント(五感の受容器):外界からの刺激

ミドルウェア(フィルタリングと処理):入力情報のフィルタリングと前処理、後処理

コントローラー(前頭前皮質):意思決定とビジネスロジックの処理

モデル(海馬):データの記憶と検索

ビュー(視覚野、聴覚野):情報の表現と出力

ロギング(長期記憶):出来事の記録

キャッシング(短期記憶):一時的な情報保持

認証(セキュリティシステム):信頼性と安全性の確認

Discussion