先週、ASP.NET MVCの4つめのメジャーなビューエンジンRazorが紹介された。他にはSpark、NHamlそして、従来からのASPXファイルテンプレート。この記事では、新しいRazorエンジンにフォーカスして4つのエンジンを紹介する。
ASPXスタイルのビューエンジンは、クラシックASPに遡る。プレースホルダには、<%= %>か新しい<%: %>シンタックスが使われる。ASPCコントロールは、時間をかけてマスタページになったが、これはまた、ページのライフサイクルが高価になることにつながった。
CastleプロジェクトのMonoRailで使用可能なSparkは、若干異なるアプローチを取る。これは、プレースホルダーをサポートし、HTMLと特別な属性とタグを使用したコードを自由に組み合わせることができる。いくぶん冗長ではあるが、完全なXML規約に則ることができるというアドバンテージがある。
NHamlは、Hamlマークアップ言語の.NET実装である。この言語は、XMLに似た記述方法だけではない。使い方は、略称を並べる形式で、終端タグのような多くの記述上のノイズを取り除くことができる。
最も新しいマイクロソフトのビューエンジンは、Razorである。すべてのテンプレートシステムには、共通した特徴があったが、これは他の3つのビューエンジンとは異なる特徴を持っている。NHamlのようなXMLマークアップではなく、SparkのようにXMLを使わないものでもない。ASPXに完全に似ておらず、@シンボルの後ろの式か通常のコントロールブロックのプレイスホルダを置き換えるのみである。特別な終端マークは必要なく、結果のコードは完結である。
デフォルトで、すべてのテキストは、よりHTMLエンコードされる。@式から始まるすべてのテキストは、デフォルトでHTMLエンコードされる。テキストは、@ブロックの内部に“コンテントブロック”を含めることができる。XMLタグを表現したり、HTMLモードに切り替えたい時には、クラシックASP開発者と同じく%> html <%=トリックを使用することができる。もし、タグを出力して欲しくない場合は、<text>をプレースホルダとして使用することができる。
既存のVBやC#のシンタックスが使用できるため、マイクロソフトは、Razorが簡単に学習できると期待している。そして、あらゆるテキストエディタが使用でき、Visual Studio 2010は、Razorファイルの完全なインテリセンスが使用できるアップデートを提供している。
Razorのもうひとつの重要な機能は、単体テストフレームワークとの互換性である。Razorテンプレートは、コントローラやWebサーバによるホストは必要なく、ビューは完全にテスト可能に書くことができる。理論上、あらゆるものがテスト可能だが、ASPXのほかの2つのエンジンは、それぞれのWebサイトにおけるテスト可能性については議論してこなかった。
すべての4つのビューエンジンは、マスタページのコンセプトをサポートしているため、これについては、あまり語られなかった。アセンブリ内に事前コンパイルされたビューは、ASPXでは部分的、RazorとSparkによる完全にサポートされている。NHamlは、現行では機能の要求リストに含まれている。RazorとSparkの特に興味深いところは、事前コンパイルされたビューとメール統合エンジンのようにホストされていないシナリオに使えるところである。