2009-11-11 16 views
5

私はASP.NET MVCで遊んでいますが、NHamlやSparkのようないくつかの代替ビューエンジンがあります。私の質問はなぜあなたは代替ビューエンジンを使用しますか?私はこのような何かを有することに利点が表示されない:代替ビューエンジンを使用する利点は何ですか?

<ul if="products.Any()"> 
    <li each="var p in products">${p.Name}</li> 
</ul> 
<else> 
    <p>No products available</p> 
</else> 

二重以来ので(スパークビューエンジンを使用して、私はこれを確認するためにスパークを使用していないと、完全に間違っているかもしれない、あなたはいないだろう(私はダングリング中括弧はかなり醜いです認めるが)内蔵のASP.NET MVCテンプレート形式を使用して

<% if products.Any() { %> 
    <ul> 
     <% foreach (var p in products) { %> 
     <li><%= p.Name %></li> 
     <% } %> 
    </ul> 
<% } else { %> 
    <p>No products available</p> 
<% } %> 

:あなたは文字列としてコードを渡しているので、インテリセンスを取得)と。別のビューエンジンの使用を検討するために、 "gator"タグ(または中括弧)が好きではないことを除いて、正当な理由はありますか?それとも新しいものなのでちょうどいいですか?

+1

私は答えが質問に埋め込まれていると思います(いいえ、私は火花を使ったことはありませんが、この比較を見てから試してみると思います)。 – erikkallen

答えて

5

それはもう少し複雑にしてみてください:。

<div if="orders.Any()" each="var order in orders"> 
    Here's your order #${orderIndex+1}: 
    <ul> 
    <li each="var p in order.Products"> 
     ${pIndex}: ${p.Name} 
     <span if="pIsLast"> (the end)</span> 
    </li> 
    </ul> 
</div> 

私はここの流れを見ることができます。私は実際にHTMLをここに見ることができます。今すぐ見てください:

<% if (orders.Any()) { %> 
    <% var orderIndex = 0; foreach (var order in orders") { %> 
    <div> 
    Here's your order #<%= (orderIndex+1) %> 
    <ul> 
     <% int pIndex = 0; foreach (var p in order.Products) 
     { bool pIsLast = pIndex == products.Count; %> 
     <li> 
      <%= pIndex %>: <%= p.Name %> 
      <% if (pIsLast) { %> 
       <span> (the end)</span> 
      <% } %> 
     </li> 
     <% ++ pIndex; } %> 
    </ul> 
    </div> 
    <% orderIndex++; } %> 
<% } %> 

私はここで迷っています。 HTMLはありますか?

私にとって、これが主な理由です。もちろん、SparkはTONSの機能を提供しています - マクロ(あなたのHtml.Helpersをスパークマークアップでコード化するところ)、他の人がリストアップしたPDFエクスポートなど - しかし、私はクリーンなコードを好みます。

別の例として、for(int i = 0; i < products.Count; i ++){Product product = products [i]; .... } 最近?あなたはforeach(製品内のvar製品){}を好むでしょうか?私は...するだろう。タイプするのが少なくて済むだけでなく、なぜなら:

  • それはそれはそれは.Count、.LENGTH、または.Count(のような追加の詳細を()隠し良く
  • を読み込み
  • より良い意思表現、またはそれはIEnumerableをだならば、あなたがでトラバースしなければならないことを私の疲れた心からの特別な方法は)
  • それは私が問題に集中できるコンテキスト(と私の疲れた心)ので
  • を乱雑に変数の数を減らし、何も} {それは助け
  • を回避する方法には行きません持っている必要はないので内部変数 -
  • 行数を削減し、あなたは配列にするIListからコレクションを変更するとき、あなたはすべての場所の上に50個のループ

を変更しないと、それはforeachのような単純なことについてです。それぞれの理由は単純ですが、それはもっと大きなものに集約されます。そして、これらの理由はSparkには完全に当​​てはまります。ちょっと、私が恋しているように見える;-)

更新:今、あなたは何を知っていますか?私の投稿の編集履歴を見てください。私はここでいくつかのビットを逃したので、ちょっとしたASPコードを何度も編集しなければならなかった。私はちょうどが正しいか間違っている場合は表示されません。完全にが隠されています私はそこにスパン、または条件がある場合、それは完全です。

更新:hm、さらに別の編集... ASPのif/spanをli内で移動しています...

1

個人的には、代替ビューエンジンは使用しませんが、その魅力はよりクリーンなビューです。あなたがSparkに慣れているなら、その最初の例はもっと良く、読みやすくなります。

しかし、私はあなたがヘルパーメソッドに与えたものなどのロジックをラップする方が好きです。私は何か新しいことを学ぶ必要はなく、すべての同僚がそれを理解することができ、私の見解は比較的清潔に保たれます。それは完全に主観的な問題であり、いずれの方法も問題ありません。

これらのビューエンジンは、主にRoRやDjangoなどの他のフレームワークからのキャリーオーバーです。ビューテンプレートシステムに対するDjangoの主張は、ビューがのみで、ビューのロジックにはであるべきです。したがって、ビューエンジンで可能なものを制限すると、コントローラとビューの間の責任を混在させる機会が少なくなります。私はクリーン探して景色を望んでいたし、私も使ってみたかったので、私は火花を選んだ

2

私は「あなたはビューエンジンを変更したい理由」あなたが尋ねる必要がある質問だと思うのではなく

「私はビューエンジンを変更する必要があります」 HTML以外のもの用のテンプレートを作成します。私は現在、XML、JSON、および電子メールテンプレートを生成するためにこのテンプレートを使用しているため、ビューエンジンだけでなくテンプレートエンジンとしても機能します。これは、ビューを文字列にレンダリングすることが可能になるため可能になりました。これは標準ビューエンジンでは(簡単に)使用できません。

単一のビューエンジンを使用する必要はありません。同時に複数のエンジンを使用することができますので、HTMLテンプレート用にデフォルトのビューエンジンを使用することができますが、XML用に切り替えることができます。

全体的に、デフォルトのビューエンジンが必要なものすべてを実行していて、それに満足しているのであれば、切り替えは気にしませんが、デフォルトのビューエンジン多分、代替案を見る時が来ているかもしれません。

0

スパークの利点のいくつか(私が好きなもの):

  1. あなたは、HTMLタグのような部分的なビューを使用することができます。使用例は、丸い角のタグにすることができます。
  2. あなたは「タグスープ」を手に入れません。たぶんあなたは今は利益が見えないかもしれませんが、巨大な見解があれば、はるかに読みやすくなります。
  3. ViewData ["..."]に強く型付けされたアクセス権が与えられます。
  4. ビューを文字列に簡単にレンダリングできます。
  5. 自動的にHtml.Encodeが適用され、アプリケーションの安全性が向上します。

私は好きではない何か:

  1. はインテリセンスとReSharperのに問題があります。
  2. ドキュメントの書式オプションは使用できません。

私はこの問題を解決しましたが、私は標準ビューエンジンを使用する必要はありません。

+0

asp.net 4.0には、MVC 2.0で使用できる新しいエンコーディングタグがあります。<%:Model.Something%>は、デフォルトでエンコーディングがONになっています。 あなたはデビッド・エボのT4テンプレートを使用する場合は、ViewDataを 含め、どこでもインテリセンスを得るには、あなたが部分図 – hminaya

+0

とコードの分離の多くを得ることができ、私はVS2008とASP.NET 3.5を使用して、私はそのタグやエンジンを使用するためにwan'tそれと互換性があります。 – LukLed

+0

文書を任意のエディタ(例:メモ帳++)でHTML形式でフォーマットしようとしましたか?または.html形式の名前を.sparkに変更します。私はSparkがよくHTMLのようなものなので、これはすべきだと思います。 – queen3

1

私はそれが他の何よりもオプションだと言いたいと思います。それは、C#とVisual Basicの間で決定するようなものだあなたが最もよく、どのようなあなたがより生産的になります知っているものを使用

関連する問題