ASP.NET MVC 3:革新の詳細な概要

画像

ASP.NET MVC 2フレームワークの最終リリースから4か月以上が経過した開発チームは、 ASP.NET MVC 3の最初の予備バージョンを発表できることを嬉しく思います 。 発表とダウンロードのリンクはこちらにあります

この記事では、フレームワークの新しいバージョンで発生した革新と変更の概要を説明します。

.NET Framework 4.0の互換性とサポート


前のバージョンとは異なり、ASP.NET MVC 3は.NET Frameworkの 4番目のバージョンのみをサポートします 。 さらに、 Visual Studioへの統合のための開発者コンポーネントは、 Visual Studio 2010およびVisual Web Developer Express 2010でのみサポートされています。

ASP.NET MVC 3フレームワークは、ASP.NET MVC 2と一緒にインストールでき、互いに別々に使用できます。

前のバージョンからASP.NET MVC 3へのアップグレード


フレームワークの以前のバージョンから新しい暫定版にプロジェクトを更新する最も簡単な方法は、新しいMVC 3プロジェクトを作成し、古いプロジェクトのすべてのコンポーネント(コントローラー、ビュー、補助ファイル)をそこに転送することです。

ASP.NET MVC 2に基づくプロジェクトをASP.NET MVC 3 Preview 1の新しいバージョンに手動でアップグレードするには、以下を実行する必要があります。

ASP.NET MVC 3プレビュー1の革新


このフレームワークの新しいバージョンには、多くの重要な革新があります。

Razor View Engineのサポート


このバージョンから、ASP.NET MVCは新しいRazorビューマークアップ構文のサポートを導入します。 少し前まで、RazorはWebMartix Web開発ツールプロジェクトのビューの基本構文として導入されました。 Razorは、MVCアプリケーションの開発に使用できるようになりました。

Razorは、HTMLコードを操作するために最適化された構文です。 ASP.NET Webフォームエンジンはコントロールに重点を置いており、そのコードはHTMLコード間でオーバーロードされているように見えます。 一方、Razorは、プレゼンテーションロジックをHTMLコードに簡潔に統合する、非常に最適化されたソリューションを提供します。

例を考えてみましょう。 以下は、古いプレゼンテーションエンジン(左)と新しいRazorエンジン(右)を使用して構築されたフォームです。

imageimage

目を引くRazorの主な違いは、開閉セット「<%%>」がないことです。 実際、 @ usingグループ化構文にも終了要素は含まれず、末尾の「}」文字のみで表されます。 これとWebFormsバージョンで「<%}%>」を記述する必要性を比較すると、Razor開発の主な焦点が何であるか、コードとその簡潔さを減らすことによる開発者の生産性が理解できます。

特に、Razorの便利さは、コード内にブランチを作成するときに現れます。たとえば、WebFormsとRazorでのコードの例を次に示します。

imageimage[40]

要素「<%%>」を使用してマークアップから条件を克服する必要があるブランチを収集するのは非常に面倒です。 一方、Razorを使用するときのマークアップブランチの調和を見てください。 サイクルなど、他の多くのケースでも同じ利点が実証されています。

Razorには、開始文字と終了文字の構文が異なるだけでなく、違いがあります。 そのため、たとえば、以下はページを構成し、WebFromsのタイトルを設定するためのコードです。

image

同じコードですが、Razorスタイルのものを以下に示します。

image

スコット・ガスリーの記事のこの翻訳から、Razor提出エンジンに関する詳細を大幅に学ぶことができます。

Visual Studioでの複数のプレゼンテーションエンジンのサポート


新しいRazorプレゼンテーションエンジンの作成により、MVC開発者は、開発者が使用するメカニズムを選択できるようになりました。 Visual Studioツールは、新しいビューを作成するときにビューエンジンを選択できるようになりました。

clip_image001

ViewおよびViewModelの動的プロパティ


MVC3は.NET 4.0のみをサポートしているため、フレームワーク開発者はASP.NET MVCの新しいバージョンの.NETを利用することができました。

これらの利点の1つは、新しい動的型のサポートです。 MVC 3では、おなじみのViewDataプロパティは、 ViewViewModelの 2つの動的実装として表されます。 これにより、次のコードの代わりに使用できます。

ViewData ["タイトル"] = "タイトル"; </ em
ViewData ["Message"] = "Hello World!";


値を異なる方法で初期化します。

ViewModel.Title = "タイトル";
ViewModel.Message = "Hello World!";

オブジェクトの拡張機能を即座に作成する機能は、.NET 4.0の動的な型プロパティです。 この場合、ビューのコンテキスト内のフィールドへのアクセスは簡略化されます。

<h2> View.Title </ h2>
<p> View.Message </ p>

依存性注入のサポート


MVC 3では、開発者はフレームワークを拡張する可能性を高め、独自の実装に頼ることなく、箱から出してコードを挿入するためのサポートを追加しました。

ASP.NET MVC 3 Preview 1は、次の場所に注入する機能を追加します。インジェクションを行うには、開発者はIServiceLocatorインターフェイスの実装を決定する必要があります。

画像

その後、開発者は、次のように定義されているグローバル静的クラスを使用して新しいインスタンスを登録します。



開発者はSetCurrentメソッドを呼び出して、 IServiceLocatorの新しい実装を設定します。

新しい実装を追加すると、ASP.NET MVC 3エンジンはそれを次の目的で使用します。ASP.NET MVC 3の次のバージョンは、追加のコードインジェクション機能を提供します。標準のASP.NET MVCメカニズムの動作におけるコードインジェクションサポートの導入に、次の変更が導入されました。

グローバルフィルター


MVC 3は、コントローラーのアクションが呼び出されるたびに呼び出されるフィルターを定義できるグローバルフィルターメカニズムを追加します。 フィルターを追加するには、グローバル静的クラスGlobalFiltersが使用されます。

GlobalFilters.Filters.Add(新しいMyActionFilter());

新しいIFilterProviderインターフェイスのインジェクションを作成することにより、グローバルフィルターメカニズムをオーバーライドできます。 これにより、グローバルフィルタを実行するための独自のロジックを作成できます。

JsonValueProviderFactory値プロバイダー


新しい値プロバイダーを使用すると、アクションでJSON形式のパラメーターセットを含む要求を受信し、アクションメソッドのパラメーターにマップできます。 以前は、この機能はASP.NET MVC Futuresライブラリでホストされてました。

たとえば、MIMEタイプがapplication / jsonの POSTリクエストに次の値が含まれている場合:

{「ProductName」:「Milk」、「Cost」:「12.0」}

次に、 JsonValueProviderFactoryプロバイダーを使用してこれらの値が次のアクションでProductModelタイプのパラメーターに自動的に割り当てられます。

[HttpPost]
Public ActionResult SaveProduct(ProductModel productModel)
{
...
}

タイプProductModelは次のように宣言されています

パブリッククラスProductModel
{
publistring ProductName {get; set;}
パブリックストリングコスト{get; set;}
}

.NET 4.0検証属性とIValidatableObjectのサポート


ValidationAttributeクラスは.NET 4.0で更新され、 ValidationContext型のパラメーターを持つ新しいオーバーロードされたIsValidメソッドで拡張されました。 このパラメーターには、新しいプロパティ値に加えて、検証コンテキストと検証オブジェクトのインスタンスが含まれます。 これにより、現在のプロパティだけでなく、オブジェクトの他のプロパティもチェックし、それらの値に基づいて検証することができます。

image

上記の例は、検証のコンテキストで渡されたオブジェクトの2つのプロパティの比較を示しています。

さらに、新しいIValidatableObjectインターフェイスが.NET 4.0に追加れました。これにより、モデルのクラスレベルで検証ロジックを定義できます。

image

上記で定義されたモデルは、独自の検証のためにIValidatableObjectインターフェイスを実装します。 MVC 3はこのインターフェイスをサポートし、それに基づいてモデルを検証します。

インターフェイスIClientValidatable


この新しいインターフェースは

image

クライアント検証のサポートに関する情報をサードパーティの検証フレームワークに提供するように設計されています。

.NET 4メタデータ属性のサポート


MVC 3は、.NET 4で導入された新しいメタデータ属性をサポートしています。たとえば、DisplayAttributeです。 MVC 3で実際に使用されている新しい属性の完全なリストはまだ利用できません。この問題に関する情報はなく、プロジェクトのソースコードはまだ利用できません。

IMetadataAware


新しいインターフェースは次のように定義されます

image

モデルのメタデータがいつ作成されたかを判断し、その時点で追加のアクションを実行できるようにすることを目的としています。 このインターフェースは、たとえば、DataAnnotationsメタデータクラスDataAnnotationsModelMetadataProviderなど、AssociatedMetadataProviderから継承されたクラスによって使用されます。

新しいタイプのアクション結果


MVC 3は、アクションの結果を返すためのいくつかの新しいタイプを導入しました。

HttpNotFoundResult

要求されたリソースが見つからなかったことを示す結果を返す単純なアクション結果タイプ(HTTP 404)。 コントローラーには、 HttpNotFoundResult型を返す新しいヘルパーメソッドHttpNotFound ()が含まれています。

image

HttpStatusCodeResult

として宣言された新しいクラス

image

HttpStatusCodeResultクラス 、アクションの結果として任意のHTTPコードを返すように設計されています。

ご覧のとおり、これにはHTTPコードのデジタル値を受け入れる2つのコンストラクターが含まれ、2番目のコンストラクターには結果の説明を含む追加の行があります。

一定のリダイレクト

MVC3は、アクション結果を永続的なリダイレクト(HTTP 301)として返すサポートを追加します。 これは、次の新しいコントローラーメソッドを使用して実行できます。

MVC2と互換性のない変更


例外フィルターの実行順序が変更されました。 以前は、コントローラーに適用された例外フィルターは、アクションに適用されたフィルターよりも早く実行されていました(それらのフィルターのOrder値が同じ場合)。 現在、この動作は変化しています。 アクションの例外フィルターが最初に実行され、その後コントローラーに適用されたフィルターが実行されます。 これらのフィルターのOrder値が異なる場合、Orderで定義された順序に従って、以前と同様に実行されます。

既知の問題


このリリースには、将来のリリースで対処される多くの問題があります。

おわりに


最初の予備リリースの結果によると、ASP.NET MVC 3の新しいバージョンは多くの新機能をもたらすと自信を持って言えます。 機能は継続的な研究のためにすでに利用可能であり、将来のリリースでは新しい機能の数が増えるだけだと思います。

そのため、新しい機能を研究およびテストするために、予備バージョンが部分的に発行されています。 すべてのASP.NET MVC開発者に、MVC3 Preview 1リリースに細心の注意を払い、その新機能の調査に時間を割くようお勧めします。

Source: https://habr.com/ru/post/J100380/


All Articles