ASP.NET MVCは拡張性を考慮して設計されており、プロセシングパイプラインのほとんどあらゆる部分は拡張可能で、自分独自のプロバイダーを使って標準実装を入れ替えることができる。 Simone Chiaretta 氏はブログ投稿「ASP.NET MVCの拡張性入門」で、 ASP.NET MVCパイプラインにおける様々な局面に対して、導入といかにして拡張性が重要になってくるのかについて短い説明を与えている。
ASP.NET MVCパイプラインは以下の部分に分けることができる。
- ルーティング部分 – ルーティングモジュールは入ってくるURLをルーティング テーブルと突き合わせ、対応する IRouteHandlerを呼ぶ。
- コントローラ生成 – IControllerFactoryは、ルートパラメータと既定の命名コンベンションを基にコントローラ インスタンスを生成する。
- アクション実行 – IActionInvokerは実行すべきメソッドを識別し、 IModelBinderがバリデートし、メソッドパラメータをバインドする。 IFilterProviderが適用されるべきフィルターを発見する。Action はタイプActionResultを返す。
- ビュー – IViewEngineは正しいビューエンジンをインスタンス化し、モデルがビューに渡される。Model Validation Providerを使って、バリデーションルールが読み出され、クライアント側のバリデーションスクリプトとリモート バリデーションスクリプトを作成する。
上記のパイプラインのあらゆるインターフェースは、拡張性を使ってカスタムプロバイダーとして実装することができ、既定の実装を入れ替えることができる。氏は目的に応じた様々なタイプの拡張部分を説明しており、これらの各拡張部をこれ以降の記事でもっと詳細に述べると約束している。
- 必須部分 – カスタムテンプレート、サーバー、そしてクライアントサイドの バリデーション と HTML ヘルパー
- 生産性向上部分 – 新しいコンベンション、AJAXヘルパー、URLヘルパー、AJAX ヘルパー, URL ヘルパー Action/Result Filtersを持ったベースコントローラ
- ケース特有部分 – 特定の問題を解決するため – ルート制約, ルートハンドラー, Action 結果, モデルバインダーと ActionMethodSelector
- コア拡張部 – コントローラファクトリー, アクションインボーカー, ビューエンジン, モデルバリデーション プロバイダー, モデルメタデータ プロバイダー
記事 には、ずっと詳しい説明がある。
ASP.NET MVC (Model-View-Controller) はASP.NETで動的なwebサイトを構築するためのパターンベースの方法であり、イベントドリブンな webフォーム の代替手段である。明確な関心事の分離に役立ち、htmlマークアップを完全にコントロールできる。