ASP.NET MVCビューエンジン(コミュニティWiki)
包括的なリストは存在しないように思われるので、ここでSOから始めましょう。これは、人々が経験を追加した場合(特に、これらのいずれかに貢献した人)、ASP.NETMVCコミュニティにとって大きな価値があります。実装するものIViewEngine
(例VirtualPathProviderViewEngine
)はすべて、ここでは公正なゲームです。新しいビューエンジンをアルファベット順に並べて(WebFormViewEngineとRazorを上部に残して)、比較の際に客観的になるようにしてください。
System.Web.Mvc.WebFormViewEngine
設計目標:
Webフォームページを応答にレンダリングするために使用されるビューエンジン。
長所:
- ASP.NETMVCに同梱されているためユビキタス
- ASP.NET開発者にとっておなじみの経験
- IntelliSense
- CodeDomプロバイダーで任意の言語を選択できます(例:C#、VB.NET、F#、Boo、Nemerle)
- オンデマンドコンパイルまたはプリコンパイル済みビュー
短所:
- 使用法は、MVCでは適用されなくなった「クラシックASP.NET」パターンの存在によって混乱します(例:ViewState PostBack)
- 「タグスープ」のアンチパターンに貢献できます
- コードブロック構文と強い型付けが邪魔になる可能性がある
- IntelliSenseは、インラインコードブロックに必ずしも適切ではないスタイルを適用します
- 単純なテンプレートを設計するときにノイズが発生する可能性があります
例:
<%@ Control Inherits="System.Web.Mvc.ViewPage<IEnumerable<Product>>" %>
<% if(model.Any()) { %>
<ul>
<% foreach(var p in model){%>
<li><%=p.Name%></li>
<%}%>
</ul>
<%}else{%>
<p>No products available</p>
<%}%>
System.Web.Razor
設計目標:
長所:
- コンパクトで表現力豊か、そして流動的
- 簡単に学べる
- 新しい言語ではありません
- 優れたIntellisenseがあります
- ユニットテスト可能
- ユビキタス、ASP.NETMVCに同梱
短所:
- 上記の「タグスープ」とは少し異なる問題が発生します。サーバータグが実際にサーバーコードと非サーバーコードの周りの構造を提供する場合、RazorはHTMLとサーバーコードを混同し、HTMLやJavaScriptを「エスケープ」する必要があるため、純粋なHTMLまたはJSの開発を困難にします(例1を参照)。特定の非常に一般的な条件下でのタグ。
- カプセル化と再利用性の低さ:通常の方法であるかのようにかみそりのテンプレートを呼び出すことは実用的ではありません。実際には、かみそりはコードを呼び出すことができますが、その逆はできません。これにより、コードとプレゼンテーションの混合が促進される可能性があります。
- 構文は非常にhtml指向です。HTML以外のコンテンツを生成するのは難しい場合があります。それにもかかわらず、razorのデータモデルは基本的に文字列の連結にすぎないため、構文とネストのエラーは静的にも動的にも検出されませんが、VS.NETの設計時はこれをいくらか軽減します。これにより、保守性とリファクタリング性が低下する可能性があります。
文書化されたAPIはありません、http://msdn.microsoft.com/en-us/library/system.web.razor.aspx
例1(「string [] ...」の配置に注意してください):
@{
<h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
foreach (var person in teamMembers)
{
<p>@person</p>
}
}
ベルビュー
設計目標:
- HTMLを「単なるテキスト」として扱うのではなく、一流の言語として尊重します。
- 私のHTMLを台無しにしないでください!データバインディングコード(ベルビューコード)は、HTMLとは別にする必要があります。
- 厳密なモデルビューの分離を実施する
点字
設計目標:
Brailビューエンジンは、Microsoft ASP.NETMVCFrameworkで動作するようにMonoRailから移植されました。Brailの概要については、CastleプロジェクトのWebサイトのドキュメントを参照してください。
長所:
- 「手首に優しいPython構文」をモデルにしています
- オンデマンドでコンパイルされたビュー(ただし、事前コンパイルは利用できません)
短所:
例:
<html>
<head>
<title>${title}</title>
</head>
<body>
<p>The following items are in the list:</p>
<ul><%for element in list: output "<li>${element}</li>"%></ul>
<p>I hope that you would like Brail</p>
</body>
</html>
Hasic
Hasicは、他のほとんどのビューエンジンのように文字列ではなく、VB.NETのXMLリテラルを使用します。
長所:
- 有効なXMLのコンパイル時チェック
- 構文の色付け
- フルインテリセンス
- コンパイルされたビュー
- 通常のCLRクラス、関数などを使用した拡張性
- 通常のVB.NETコードであるため、シームレスな構成と操作
- ユニットテスト可能
短所:
- パフォーマンス:クライアントに送信する前に、DOM全体を構築します。
例:
Protected Overrides Function Body() As XElement
Return _
<body>
<h1>Hello, World</h1>
</body>
End Function
NDjango
設計目標:
NDjangoは、
F#言語を使用した.NETプラットフォームでのDjangoテンプレート言語の実装です。
長所:
NHaml
設計目標:
RailsHamlビューエンジンの.NETポート。HamlのWebサイトから:
Hamlは、インラインコードを使用せずにWebドキュメントのXHTMLをクリーンかつ簡単に記述するために使用されるマークアップ言語です... Hamlは、実際にはXHTMLの抽象的な記述であるため、XHTMLをテンプレートに明示的にコーディングする必要がありません。 、動的コンテンツを生成するためのコードを使用します。
長所:
- 簡潔な構造(すなわちDRY)
- よくインデントされている
- 明確な構造
- C#Intellisense(ReSharperなしのVS2008の場合)
短所:
- マークアップの知識を活用するのではなく、XHTMLからの抽象化
- VS2010のIntellisenseはありません
例:
@type=IEnumerable<Product>
- if(model.Any())
%ul
- foreach (var p in model)
%li= p.Name
- else
%p No products available
NVelocityViewEngine(MvcContrib)
設計目標:
人気のあるJavaプロジェクト
Velocityの.NETポートであるNVelocityに基づくビューエンジン
。
長所:
短所:
- ビューで使用できるヘルパーメソッドの数が限られています
- Visual Studioが自動的に統合されない(IntelliSense、ビューのコンパイル時チェック、またはリファクタリング)
例:
#foreach ($p in $viewdata.Model)
#beforeall
<ul>
#each
<li>$p.Name</li>
#afterall
</ul>
#nodata
<p>No products available</p>
#end
SharpTiles
設計目標:
SharpTilesは、JSTLの部分的な移植版であり、 Tilesフレームワーク
の背後にある概念と組み合わされています(マイルストーン1現在)。
長所:
- Java開発者になじみがある
- XMLスタイルのコードブロック
短所:
例:
<c:if test="${not fn:empty(Page.Tiles)}">
<p class="note">
<fmt:message key="page.tilesSupport"/>
</p>
</c:if>
Spark View Engine
設計目標:
アイデアは、htmlがフローを支配し、コードがシームレスに収まるようにすることです。
長所:
短所:
- テンプレートロジックとリテラルマークアップの明確な分離はありません(これは名前空間プレフィックスによって軽減できます)
例:
<viewdata products="IEnumerable[[Product]]"/>
<ul if="products.Any()">
<li each="var p in products">${p.Name}</li>
</ul>
<else>
<p>No products available</p>
</else>
<Form style="background-color:olive;">
<Label For="username" />
<TextBox For="username" />
<ValidationMessage For="username" Message="Please type a valid username." />
</Form>
StringTemplateビューエンジンMVC
設計目標:
- 軽量。ページクラスは作成されません。
- 速い。テンプレートは、応答出力ストリームに書き込まれます。
- キャッシュされます。テンプレートはキャッシュされますが、FileSystemWatcherを使用してファイルの変更を検出します。
- 動的。テンプレートは、コードでその場で生成できます。
- フレキシブル。テンプレートは任意のレベルにネストできます。
- MVCの原則に沿っています。UIとビジネスロジックの分離を促進します。すべてのデータは事前に作成され、テンプレートに渡されます。
長所:
- StringTemplateJava開発者にはおなじみ
短所:
- 単純なテンプレート構文は、意図した出力に干渉する可能性があります(jQueryの競合など)
ウィングビート
Wing Beatsは、XHTMLを作成するための内部DSLです。F#に基づいており、ASP.NET MVCビューエンジンが含まれていますが、XHTMLを作成する機能のためだけに使用することもできます。
長所:
- 有効なXMLのコンパイル時チェック
- 構文の色付け
- フルインテリセンス
- コンパイルされたビュー
- 通常のCLRクラス、関数などを使用した拡張性
- 通常のF#コードであるため、シームレスな構成と操作
- ユニットテスト可能
短所:
- あなたは実際にはHTMLを書くのではなく、DSLでHTMLを表すコードを書きます。
XsltViewEngine(MvcContrib)
設計目標:
おなじみのXSLTからビューを構築します
長所:
- 広く遍在
- XML開発者にとっておなじみのテンプレート言語
- XMLベース
- 実績のある
- 構文および要素のネストエラーは静的に検出できます。
短所:
- 関数型言語スタイルはフロー制御を困難にします
- XSLT 2.0は(おそらく?)サポートされていません。(XSLT 1.0はそれほど実用的ではありません)。