ASP.NETで何年も要求があったことの1つが、MVCベースアーキテクチャーを使ったWebアプリケーション開発のビルドインサポートです。
先週末、オースティンで行われたAlt.NETカンファレンスで、私のチームが作業していたASP.NETのMVCフレームワークの公開デモを初めて行いました。このプレゼンについてはScott Hanselmanのブログにビデオがあるのでご覧頂けます。
ASP.NET MVCフレームワークの公開プレビューは今年の年末辺りにリリースされます。その後、完全にASP.NET機能をサポートしたものを来年の最初の半年内に出荷します。
モデルビューコントローラー (MVC) フレームワークとは?
MVCは、フレームワーク方法論で、アプリケーションの実装を3つのコンポーネントの役割(モデル、ビュー、コントロール)に分けるものです。
- MVCベースのアプリケーションでの"モデル"は状態を保つことに責任を持つコンポーネントのことです。この状態は通常データベース内に保持されます。(例えば、SQL内のProductsテーブルにある注文データを表すために使用されるProductクラスがあるなど。)
- MVCベースのアプリケーションでの"ビュー"はアプリケーションのユーザインターフェイスを表示することに責任を持ったコンポーネントのことです。通常、このUIはモデルデータから作成されます。(例えば、Productオブジェクトの現在の状態に基づいてテキストボックス、ドロップダウン、チェックボックスを持つProductの"編集"ビューを作成するなど。)
- MVCベースのアプリケーションでの"コントローラ"はエンドユーザ操作の処理、モデルの操作、最後にUIを表示するために描画するビューを選択することに責任を持ったコンポーネントのことです。MVCアプリケーションでは、ビューは情報を表示するためだけのもので、ユーザからの入力や操作に対する処理や応答を行うコントローラです。
MVCの方法論を使用する利点の1つは、アプリケーションにあるモデル、ビュー、コントローラ間の問題をきちんと分別できるようになることです。問題をきちんと分別しておくことにより、異なるアプリケーションのコンポーネント間のコントラクトがよりきれいに定義され、理路整然となるため、アプリケーションのテストが非常に簡単になります。
MVCのパターンは赤/緑のテスト駆動型開発(TDD)(実際にコードを書く前にまず新しいコードの要求を定義、認証する自動化された単体テストの実装を行う)を有効にすることも可能です。
ASP.NET MVC フレームワークについての詳細
ASP.NET MVC フレームワークについて、いくつかの詳細を簡単に紹介:
- デフォルトで問題の分別、テストの容易性、TDDが可能です。MVCフレームワーク内のすべてのコアコントラクトはインターフェイスに基づいており、簡単に模倣可能(IHttpRequest/IHttpResponseの本質をベースにしたインターフェイスを含む)です。ASP.NETプロセス内でコントローラを起動させる必要なく(単体テストを速くします。)アプリケーションを単体テストすることができます。このテストを行いたい場合どの単体テストフレームワーク(NUnit, MBUnit, MS Testなどを含む)を使用することができます。
- 非常に拡張可能でプラガブルです。MVCフレームワークにある全てのものは、簡単に置換、カスタマイズできるように設計されています。(例えば、オプションとして自分のビューエンジン、ルーチンポリシー、パラメータシリアライゼーションなどにプラグインすることができます。)また、既存の依存性の注入やIOCコンテナ・モデル (Windsor, Spring.Net, NHibernateなど)の使用もサポートされています。
- クリーンなURLでアプリケーションを構築できるようにする非常に強力なURLマッピングコンポーネントが含まれています。URLはその中で拡張子を含む必要はなく、簡単にSEOやRESTフレンドりな名前付けパターンをサポートするように設計されています。例えば、/products/edit/4 URLを上記プロジェクト内でProductsController クラスの"編集"アクションへ、また/Blogs/scottgu/10-10-2007/SomeTopic/ URLをBlogEngineController クラスの"投稿を表示"アクションへ簡単にマッピングすることができます。
- MVCフレームワークは既存のASP.NET .ASPX, .ASCX, .Master マークアップファイルを "テンプレートを確認"で使用することができます。(つまり、ネスト化されたマスターページ、<%= %>スニペット、宣言的サーバーコントロール、テンプレート、データバインディング、ローカライゼーションなどの既存のASP.NET機能を簡単に使用することができます。) しかし、サーバに返す操作で既存のポストバックモデルを使用しません。代わりに、すべてのエンドユーザの操作をコントローラクラス(問題の分別とテストの容易性を可能にする)を経由させます(これは、またMVCベースのビュー内でViewstateがなく、ページライフサイクルがないことを意味します。)
- ASP.NET MVCフレームワークは既存のASP.NET機能(フォームおよびウィンドウズの認証、URL認証、メンバーシップおよびロール、出力およびデータのキャッシュ、セッションやプロフィールの状態管理、ヘルスモニタリング、構成システム、プロバイダアーキテクチャーなど))を全てサポートしています。
まとめ
もしMVC技法を使用してWebアプリケーションを構築しようとしている場合、この新しいASP.NETのMVCフレームワークオプションがクリーンで簡単に使用できるものだと思われると思います。簡単にアプリケーションでの問題を分別し、クリーンなテストの容易性およびTDDを促進することができます。
新しいMVC機能がどのように作用するか、またそれらをどのように活用できるかについて、この数週間内にいくつかチュートリアルを投稿します。