ASP.NET MVCで使用可能なさまざまなビューエンジンの内訳をSOとGoogleで検索しましたが、ビューエンジンとは何かについての簡単な高レベルの説明以上のものは見つかりませんでした。
私は必ずしも「最高」または「最速」を探しているのではなく、さまざまな状況で主要なプレーヤー(たとえば、デフォルトのWebFormViewEngine、MvcContrib View Enginesなど)の長所/短所の実際の比較を探しています。これは、既定のエンジンからの切り替えが特定のプロジェクトまたは開発グループにとって有利かどうかを判断するのに非常に役立つと思います。
誰もそのような比較に遭遇しましたか?
包括的なリストは存在しないように思われるので、ここからリストを始めましょう。これは、ASP.NET MVCコミュニティにとって、ユーザーが経験を追加する場合(特に、これらのいずれかに貢献した人)にとって大きな価値があります。ここでIViewEngine
を実装するもの(たとえば、VirtualPathProviderViewEngine
)は公平なゲームです。新しいビューエンジンをアルファベット順に並べて(WebFormViewEngineとRazorを一番上に残して)、比較で客観的になるようにしてください。
System.Web.Mvc.WebFormViewEngine (
設計目標:
Webフォームページを応答にレンダリングするために使用されるビューエンジン。
長所:
短所:
例:
<%@ 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>
<%}%>
設計目標:
長所:
短所:
Con例#1(「string [] ...」の配置に注意してください):
@{
<h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
foreach (var person in teamMembers)
{
<p>@person</p>
}
}
設計目標:
- HTMLを「単なるテキスト」として扱うのではなく、第一級言語として尊重します。
- 私のHTMLを台無しにしないでください!データバインディングコード(Bellevueコード)はHTMLから分離する必要があります。
- 厳密なモデルビュー分離を強制する
ブレール (
設計目標:
Brailビューエンジンは、Microsoft ASP.NET MVCフレームワークで動作するようにMonoRailから移植されました。 Brailの概要については、 CastleプロジェクトのWebサイト のドキュメントを参照してください。
長所:
短所:
例:
<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は、他のほとんどのビューエンジンのような文字列の代わりにVB.NETのXMLリテラルを使用します。
長所:
短所:
例:
Protected Overrides Function Body() As XElement
Return _
<body>
<h1>Hello, World</h1>
</body>
End Function
設計目標:
NDjangoは、.NETプラットフォームでの F#言語 を使用した Djangoテンプレート言語 の実装です。
長所:
WebFormViewEngine
よりもストレス下でより安定しているようです設計目標:
Rails Hamlビューエンジンの.NETポート。 Haml Webサイト から:
Hamlは、インラインコードを使用せずに、WebドキュメントのXHTMLを簡潔かつ単純に記述するために使用されるマークアップ言語です... 、動的コンテンツを生成するためのコードを使用します。
長所:
短所:
例:
@type=IEnumerable<Product>
- if(model.Any())
%ul
- foreach (var p in model)
%li= p.Name
- else
%p No products available
NVelocityViewEngine(MvcContrib) (
設計目標:
NVelocity に基づくビューエンジン。これは、人気のあるJavaプロジェクトの.NETポートです Velocity 。
長所:
短所:
例:
#foreach ($p in $viewdata.Model)
#beforeall
<ul>
#each
<li>$p.Name</li>
#afterall
</ul>
#nodata
<p>No products available</p>
#end
設計目標:
SharpTilesは、 JSTL の部分的なポートであり、- Tilesフレームワーク (マイルストーン1時点)の背後にある概念と組み合わされています。
長所:
短所:
例:
<c:if test="${not fn:empty(Page.Tiles)}">
<p class="note">
<fmt:message key="page.tilesSupport"/>
</p>
</c:if>
設計目標:
アイデアは、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 View Engine MVC
設計目標:
- 軽量。ページクラスは作成されません。
- 速い。テンプレートは、応答出力ストリームに書き込まれます。
- キャッシュされます。テンプレートはキャッシュされますが、FileSystemWatcherを使用してファイルの変更を検出します。
- 動的。テンプレートは、コードでその場で生成できます。
- フレキシブル。テンプレートは任意のレベルにネストできます。
- MVCの原則に沿って。 UIとビジネスロジックの分離を促進します。すべてのデータは事前に作成され、テンプレートに渡されます。
長所:
短所:
Wing Beatsは、XHTMLを作成するための内部DSLです。 F#に基づいており、ASP.NET MVCビューエンジンが含まれていますが、XHTMLを作成する機能のためだけに使用することもできます。
長所:
短所:
設計目標:
使い慣れたXSLTからビューを構築します
長所:
短所:
私の現在の選択はカミソリです。これは非常にクリーンで読みやすく、ビューページのメンテナンスが非常に簡単です。本当に素晴らしいインテリセンスのサポートもあります。また、Webヘルパーと併用すると、非常に強力です。
簡単なサンプルを提供するには:
@Model namespace.model
<!Doctype html>
<html>
<head>
<title>Test Razor</title>
</head>
<body>
<ul class="mainList">
@foreach(var x in ViewData.model)
{
<li>@x.PropertyName</li>
}
</ul>
</body>
そして、あなたはそれを持っています。それは非常にきれいで読みやすいです。確かに、これは簡単な例ですが、複雑なページやフォームでも、読みやすく理解しやすいものです。
短所は?これまでのところ(私はこれは初めてです)、フォームのヘルパーのいくつかを使用する場合、CSSクラス参照を追加するためのサポートが不足しており、少し面倒です。
ありがとうNathj07
これは実際にはあなたの質問に答えるものではありませんが、View Engineによって目的は異なります。 Spark View Engine は、例えば、すべてを流で読みやすいものにすることにより、「タグスープ」のビューを取り除くことを目的としています。
あなたの最善の策は、いくつかの実装を見ることです。ソリューションの目的に合っていると思われる場合は、試してみてください。 MVCでビューエンジンを組み合わせて使用できるため、特定のエンジンを使用しない場合でも問題はありません。
これを確認してください SharpDOM 。これは、htmlおよびasp.net mvcビューエンジンを生成するためのc#4.0内部dslです。
ndjango が好きです。非常に使いやすく、非常に柔軟です。カスタムタグとフィルターを使用して、ビュー機能を簡単に拡張できます。 「F#に強く結び付けられている」ことは、むしろ不利というよりも有利だと思います。
ユーザーがすべてのWebサイトにアクセスしなくても各ビューエンジンのサンプルを取得できるように、このリストには各ビューエンジンのサンプルも含める必要があると思います。
写真は千の言葉を言い、マークアップのサンプルはビューエンジンのスクリーンショットのようなものです:)だからここに私のお気に入りの1つです スパークビューエンジン
<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>