連載:〜ScottGu氏のブログより〜

ASP.NET MVCベータ版がリリース

Scott Guthrie 著/Chica
2008/10/24
Page1 Page2 Page3

HTMLヘルパのクリーンアップ

 本日のベータでは、HTMLヘルパに対していくつかのクリーンアップによる改善がなされています(非常に多くのオーバーロードの組み合わせがあるため、総体的にこれはややこしい部分になっています)。

■Html.Form → Html.BeginForm

 本日のベータにおける利便性の変更点の1つは、Html.Form()がHtml.BeginForm()に名称変更され、それを使用する2つのモードがサポートされたことです。1つがusingステートメントで、もう1つが明示的なHtml.EndForm()ヘルパ・メソッドです。これら2つのアプローチをサポートすることになった理由は、どのシナリオでどのようにusingステートメントが動作するのかについて、フォーラムで多くの質問と混乱があったためです(このパターンは多くの開発者にはなじみがなかったのです)。

 以下の2つの例では、2つの異なるフォーム・アプローチを使用して、上記の(バリデーション・エラー・メッセージのUIを備えた)画面作成のシナリオを実装する方法を示しています。

■アプローチ 1:usingステートメントとHtml.BeginForm()

 以下のアプローチでは、</form>で自動終了するために、VBやC#のusingキーワードでIDisposableパターンを使用しています(図21)。


図21

■アプローチ 2:明示的なHtml.BeginForm() とHtml.EndForm()

 以下のアプローチでは、</form>で閉じるために、明示的にEndForm()を使用しています(図22)。


図22

 開発者はどちらでも使いやすい方を使用できます。2つのアプローチはロジック的にまったく同じものです。

■多くのHTMLヘルパ・メソッドが拡張メソッドに移動しました

 本日のベータでの変更の1つが、多くのHtmlヘルパ・メソッドがSystem.Web.Mvc.Html名前空間にある拡張メソッドに移動されたことです(以前はHtmlHelperクラス上の単なるインスタンス・メソッドでした)。同じようなことを、“Preview 5”のAJAXヘルパ・メソッドでも行いました(現在、それらはSystem.Web.Mvc.Ajax名前空間にあります)。

 これらの変更はマークアップ表示におけるIntelliSenseには影響を与えません(デフォルトで自動的にweb.configファイルにある名前空間を参照するようにしているため以前と同じように動作しますが、もしPreview 5からアプリケーションを移行している場合は、その名前空間をweb.configに追加する必要があります。この方法についてはリリース・ノートにある手順をお読みください)。もし単体のクラスやテストがあり、それらのヘルパ・メソッドを使用している場合、適切な“using”ステートメントを追加して、それらをインポートするようにしてください。

 このヘルパ・メソッドをインスタンス・メソッドではなく拡張メソッドに移動した理由は、(将来私たちにも柔軟性が持てるのと同時に)開発者がビルトインの実装を追加、削除、置換できるように、柔軟性をもっと提供したかったためです。

Silverlight/ASP.NET MVCプロジェクトの統合

 新しいSilverlight 2プロジェクトをVisual StudioやVisual Web Developer 2008 Expressで(最近リリースされたSilverlight 2およびVS 2008 Tools for Silverlightのダウンロードを使用して)作成する際には、それをホストするプロジェクトとして、ASP.NET Webサイト、ASP.NET Webアプリケーション・プロジェクト、ASP.NET MVCプロジェクトから選択できます(図23)。


図23

 このオプションを選択した場合、IDEで変更を行いビルドすれば、Visual Studioは自動的にSilverlightアプリケーションをASP.NET MVCアプリケーションにコピーし、展開/更新します。これにより、バックエンドがASP.NET MVC Webで、フロントエンドが.NETベースのSilverlight(ブラウザ内で動作)というインテグレーションを容易に始めることができ、いくつか興味深い新しい可能性も開けます。

ASP.NET MVC Futuresアセンブリ

 過去のいくつかのプレビュー・リリースに対して、ASP.NET MVCの機能は2つのアセンブリに分割されました。System.Web.Mvc.dllとMicrosoft.Web.Mvc.dllです。後者のアセンブリと名前空間には“futures”機能が含まれていますが、これはコアのV1製品で出荷することがまだ決定されていません。“決定されている”機能は、futuresアセンブリからコア・アセンブリへ移動して、名前空間も変更しています(Microsoft.Web.MvcからSystem.Web.Mvcへ)。

 以前のプレビュー・リリースでは、[ファイル]−[新規のASP.NET MVCプロジェクト]を選択した際に自動的に“futures”アセンブリを追加しました。本日のベータからは、このアセンブリは自動的に追加されませんので、それを利用する場合は、明示的にそれをプロジェクトに追加する必要があります。この理由は、V1製品で完全にサポートされる機能(これは製品サポートと後方互換性に対する固い確約を意味しています)と、今後まだ展開するかもしれない(そして次回まで、サポートされる製品には追加されない)機能とを開発者が明確に区別できるようにするためです。

 重要:futuresアセンブリ(すべてのソース・コードが添付されています)は引き続き出荷され、ASP.NET MVC V1で動作する予定です。そのため、その中に非常にお気に入りの機能があっても、それがなくなるのではという心配をする必要はありません(それはまだありますし、使用することもできます)。ただ、現在はプロジェクトでは明示的にアセンブリを参照して使用する必要があります。

 今日中にベータ上で動作するASP.NET MVC Futuresアセンブリのバージョンを出荷する予定です。それは、ここからダウンロードすることができるようになります。

\BinとGACの展開

 ASP.NET MVCベータは現在、GACベースの展開(マシンにアセンブリを一度だけインストール)と、ローカルの\binベースの展開(アプリケーション・ディレクトリにアセンブリのコピーを保存)の両方をサポートしています。

 Windows Updateを通じて自動更新ができるように、GACを使用する予定です(.NET Frameworkのほかの部分と同様に、管理者は自動的にマシンにパッチを当てることができます。かつ、個々のアプリケーションを更新する必要はありません)。GACベースの展開でのマイナス点ですが、通常はサーバ・マシン上の管理者権限がないため(GACにコンポーネントをインストールするには管理者権限が必要)、ホストされたシナリオではGACコンポーネントを必要とするアプリケーションを展開するのが難しくなることです。

 ホストされたシナリオでうまく動作させるために(そしてASP.NET MVCを動作させるためにホストしている側がASP.NET 3.5以外に何もインストールする必要がないようにするために)、アプリケーションの\binディレクトリでASP.NET MVCフレームワークのアセンブリが展開できる機能もサポートします。これにより、サーバへアプリケーションを単純にxcopy/ftpするだけで動作するようになります(それを実行するために管理者権限やセットアップは必要ありません)。これについて1つ注意すべき点は、更新があった場合には常にアプリケーションのアセンブリの更新を行う責任が生じるという点です。Windows Updateは、自動でマシン上のすべてのアプリケーションのディレクトリを探しての更新はしません。

まとめ

 本日のベータ・リリースは最終のASP.NET MVC 1.0製品に一歩近づきました。100%の機能が完了したわけではありませんが、主要なサブシステムはすべてが完成形に非常に近いものになっており、品質レベルも現在では非常に高くなっています。

 なるべく、数週間中にさらなるチュートリアルを投稿して、ASP.NET MVCを最初から始め、そしてロジック的にどんどんリッチにしていくようなシナリオをご紹介できればと思います。チュートリアルのリストには、ずっと書くといっている、評判のよくないMVC+AJAXの投稿も含まれていますが、まだできていません(いい訳になりますが、Silverlight 2、ASP.NET MVC、.NET 4.0、VS10、Windows 7の出荷サイクルがすべて私のチームで並行に進んでいて、残念ながら非常に忙しいというのが遅れている理由です)。

 いつも確認していることですが、もしMVCのモデルが好きではなかったり、これが自分の開発スタイルには不自然だと感じられたりする場合は、お使いになる必要はありません。これはまったくオプションとしての提供となっており、既存のWebフォーム・モデルを置換するものではありません。WebフォームもMVCも、両方とも完全にサポートされ、強化されていく方向に向かっています(.NET 4.0のASP.NET Webフォームでは、よりリッチなURLルーティング機能、よりよいHTML CSSタグのサポート、ClientIdプロパティの完全な制御、さらなるAJAX機能などが追加される予定で、これらについては、まもなくブログに書きます)。ですので、もしMVCオプションが好きでなくても、心配したり、使用しなければならないと思い込んだりしないでください(その必要はありません)。

 Hope this helps,

 ScottEnd of Article

 

 INDEX
  〜ScottGu氏のブログより〜
  ASP.NET MVCベータ版がリリース
    1.VSの新しい“ビューの追加”メニュー/新しい\ScriptsディレクトリとjQueryサポート
    2.フォーム送信とモデル・バインダの改善
  3.HTMLヘルパ/Silverlightプロジェクトの統合/ASP.NET MVC Futuresアセンブリ
 
インデックス・ページヘ  「〜ScottGu氏のブログより〜」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間