ASP.NET MVC の概要

マイクロソフトより

ASP.NET MVC アプリケーションと ASP.NET Web フォーム アプリケーションの違いについて説明します。 ASP.NET MVC アプリケーションをビルドするタイミングを決定する方法について説明します。

Model-View-Controller (MVC) アーキテクチャ パターンは、アプリケーションを 3 つの主要なコンポーネント (モデル、ビュー、コントローラー) に分離します。 ASP.NET MVC フレームワークは、MVC ベースの Web アプリケーションを作成するための ASP.NET Web フォーム パターンの代替手段を提供します。 ASP.NET MVC フレームワークは、(Web フォーム ベースのアプリケーションと同様に) マスター ページやメンバーシップ ベースの認証などの既存の ASP.NET 機能と統合された、軽量でテスト可能なプレゼンテーション フレームワークです。 MVC フレームワークは System.Web.Mvc 名前空間で定義されており、 System.Web 名前空間の基本的なサポートされる部分です。

MVC は、多くの開発者が慣れている標準的な設計パターンです。 一部の種類の Web アプリケーションは、MVC フレームワークの恩恵を受けることができます。 他のユーザーは、Web フォームとポストバックに基づく従来の ASP.NET アプリケーション パターンを引き続き使用します。 他の種類の Web アプリケーションは、2 つのアプローチを組み合わせます。どちらの方法も他のアプローチを除外します。

MVC フレームワークには、次のコンポーネントが含まれています。

パラメーター値を受け取るコントローラー アクションの呼び出し

図 01: パラメーター値を必要とするコントローラー アクションの呼び出し (フルサイズの画像を表示する] をクリックします)

  • モデル。 モデル オブジェクトは、アプリケーションのデータ ドメインのロジックを実装するアプリケーションの部分です。 多くの場合、モデル オブジェクトはモデルの状態を取得してデータベースに格納します。 たとえば、Product オブジェクトは、データベースから情報を取得して操作し、更新された情報を SQL Server の Products テーブルに書き戻す場合があります。

小規模なアプリケーションでは、モデルは物理的な分離ではなく、概念的な分離とされることが多いです。 たとえば、アプリケーションがデータ セットのみを読み取ってビューに送信する場合、アプリケーションには物理モデル レイヤーと関連付けられたクラスがありません。 その場合、データ セットはモデル オブジェクトの役割を担います。

  • ビュー。 ビューは、アプリケーションのユーザー インターフェイス (UI) を表示するコンポーネントです。 通常、この UI はモデル データから作成されます。 たとえば、Products オブジェクトの現在の状態に基づいてテキスト ボックス、ドロップダウン リスト、およびチェック ボックスを表示する Products テーブルの編集ビューがあります。

  • コントローラー。 コントローラーは、ユーザーの操作を処理し、モデルを操作し、最終的に UI を表示する表示するビューを選択するコンポーネントです。 MVC アプリケーションでは、ビューは情報のみを表示し、コントローラーがユーザーの入力と操作を処理して応答します。 たとえば、コントローラーはクエリ文字列の値を処理し、これらの値をモデルに渡します。モデルはこれらの値を使用してデータベースにクエリを実行します。

MVC パターンを使用すると、アプリケーションのさまざまな側面 (入力ロジック、ビジネス ロジック、UI ロジック) を分離するアプリケーションを作成しながら、これらの要素間の疎結合を実現できます。 このパターンは、アプリケーション内の各種類のロジックを配置する場所を指定します。 UI ロジックはビューに属しています。 入力ロジックはコントローラーに属しています。 ビジネス ロジックはモデルに属しています。 この分離により、アプリケーションをビルドするときの複雑さを管理できます。これは、一度に実装の 1 つの側面に集中できるためです。 たとえば、ビジネス ロジックに依存せずにビューに集中できます。

MVC パターンを使用すると、複雑さを管理するだけでなく、Web フォーム ベースの ASP.NET Web アプリケーションをテストするよりも簡単にアプリケーションをテストできます。 たとえば、Web フォーム ベースの ASP.NET Web アプリケーションでは、出力の表示とユーザー入力への応答の両方に 1 つのクラスが使用されます。 Web フォーム ベースの ASP.NET アプリケーションの自動テストの作成は複雑になる可能性があります。個々のページをテストするには、ページ クラス、そのすべての子コントロール、およびアプリケーション内の追加の依存クラスをインスタンス化する必要があるためです。 ページを実行するために非常に多くのクラスがインスタンス化されるため、アプリケーションの個々の部分だけに焦点を当てるテストを記述するのは困難な場合があります。 したがって、Web フォーム ベースの ASP.NET アプリケーションのテストは、MVC アプリケーションのテストよりも実装が困難な場合があります。 さらに、Web フォーム ベースの ASP.NET アプリケーションでのテストには、Web サーバーが必要です。 MVC フレームワークはコンポーネントを分離し、インターフェイスを大量に使用するため、フレームワークの残りの部分から分離して個々のコンポーネントをテストできます。

MVC アプリケーションの 3 つの主要コンポーネント間の疎結合により、並列開発も促進されます。 たとえば、1 人の開発者がビューで作業でき、2 番目の開発者はコントローラー ロジックに取り組み、3 番目の開発者はモデルのビジネス ロジックに集中できます。

MVC アプリケーションを作成するタイミングの決定

ASP.NET MVC フレームワークと ASP.NET Web フォーム モデルのどちらを使用して Web アプリケーションを実装するかを慎重に検討する必要があります。 MVC フレームワークは Web フォーム モデルを置き換えません。どちらのフレームワークも Web アプリケーションに使用できます。 (既存の Web フォーム ベースのアプリケーションがある場合、これらは常にそのまま動作します)。

特定の Web サイトに MVC フレームワークまたは Web フォーム モデルを使用する前に、各アプローチの利点を比較検討してください。

MVC-Based Web アプリケーションの利点

ASP.NET MVC フレームワークには、次の利点があります。

  • アプリケーションをモデル、ビュー、コントローラーに分割することで、複雑さを管理しやすくなります。
  • ビューステートまたはサーバーベースのフォームは使用しません。 これにより、MVC フレームワークは、アプリケーションの動作を完全に制御する必要がある開発者に最適です。
  • 1 つのコントローラーを介して Web アプリケーション要求を処理するフロント コントローラー パターンを使用します。 これにより、豊富なルーティング インフラストラクチャをサポートするアプリケーションを設計できます。 詳細については、「 フロント コントローラー」を参照してください。
  • テスト駆動型開発 (TDD) のサポートが向上します。
  • これは、アプリケーションの動作を高度に制御する必要がある開発者や Web デザイナーの大規模なチームによってサポートされている Web アプリケーションに適しています。

WebフォームベースのWebアプリケーションの利点

Web フォーム ベースのフレームワークには、次の利点があります。

  • HTTP 経由で状態を保持するイベント モデルがサポートされており、基幹業務 Web アプリケーション開発にメリットがあります。 Web フォーム ベースのアプリケーションは、数百のサーバー コントロールでサポートされている多数のイベントを提供します。
  • 個々のページに機能を追加するページ コントローラー パターンを使用します。 詳細については、「 ページ コントローラー」を参照してください。
  • ビュー ステートまたはサーバー ベースのフォームを使用するため、状態情報の管理が容易になります。
  • これは、迅速なアプリケーション開発に使用できる多数のコンポーネントを利用したい Web 開発者やデザイナーの小規模なチームに適しています。
  • 一般に、コンポーネント ( Page クラス、コントロールなど) は緊密に統合されており、通常は MVC モデルよりも必要なコードが少ないため、アプリケーション開発の複雑さが少なくなります。

ASP.NET MVC Framework の機能

ASP.NET MVC フレームワークには、次の機能があります。

  • 既定では、アプリケーション タスク (入力ロジック、ビジネス ロジック、UI ロジック)、テスト可能性、テスト駆動開発 (TDD) の分離。 MVC フレームワーク内のすべてのコア コントラクトはインターフェイス ベースであり、モック オブジェクトを使用してテストできます。モック オブジェクトは、アプリケーション内の実際のオブジェクトの動作を模倣するシミュレートされたオブジェクトです。 ASP.NET プロセスでコントローラーを実行しなくても、アプリケーションを単体テストできます。これにより、単体テストが迅速かつ柔軟になります。 .NET Framework と互換性のある任意の単体テスト フレームワークを使用できます。
  • 拡張可能でプラグ可能なフレームワーク。 ASP.NET MVC フレームワークのコンポーネントは、簡単に置き換えたりカスタマイズしたりできるように設計されています。 独自のビュー エンジン、URL ルーティング ポリシー、アクション メソッド パラメーターのシリアル化、およびその他のコンポーネントをプラグインできます。 ASP.NET MVC フレームワークでは、依存関係挿入 (DI) および制御の反転 (IOC) コンテナー モデルの使用もサポートされています。 DI を使用すると、クラスに依存してオブジェクト自体を作成する代わりに、オブジェクトをクラスに挿入できます。 IOC は、オブジェクトに別のオブジェクトが必要な場合、最初のオブジェクトが構成ファイルなどの外部ソースから 2 番目のオブジェクトを取得するように指定します。 これにより、テストが簡単になります。
  • わかりやすい検索可能な URL を持つアプリケーションを構築できる強力な URL マッピング コンポーネントです。 URL にはファイル名拡張子を含める必要はありません。また、検索エンジンの最適化 (SEO) と表現状態転送 (REST) のアドレス指定に適した URL 名前付けパターンをサポートするように設計されています。
  • 既存の ASP.NET ページ (.aspx ファイル)、ユーザー コントロール (.ascx ファイル)、およびマスター ページ (.master ファイル) マークアップ ファイルでマークアップをビュー テンプレートとして使用するためのサポート。 入れ子になったマスター ページ、インライン式 (<%= %>)、宣言型サーバー コントロール、テンプレート、データ バインディング、ローカライズなど、ASP.NET MVC フレームワークで既存の ASP.NET 機能を使用できます。
  • 既存の ASP.NET 機能のサポート。 ASP.NET MVC では、フォーム認証と Windows 認証、URL 承認、メンバーシップとロール、出力とデータ キャッシュ、セッションとプロファイルの状態管理、正常性の監視、構成システム、プロバイダー アーキテクチャなどの機能を使用できます。