2010-12-01 15 views
3

私と同僚は、ページ上にリンクを生成する方法について議論しています。 htmlヘルパーを使用するか、ビュー内に非常に単純なビューロジックを保持する必要がありますか?MVCロジック、ビューとヘルパー - 特定の話

このプロジェクトでは、Castle MonorailとNVelocityビューエンジンを使用しています。私は以下の両方のオプションを考慮し、意見を述べる人には感謝します。

このストーリーでは、リンクは現在、1ページでのみ使用されています。

オプション1 - ヘルパー

でヘルパーコード

var action = snail.IsActive ? "ConfirmDeactivate" : "ConfirmActivate"; 
    var routeValues = new Dictionary<string, string> 
         { 
         {"action", action}, 
         {"querystring", "id=" + snail.ID} 
         }; 
    var href = UrlHelper.For(routeValues); 

    var link = new XElement("a"); 
    link.SetAttributeValue("href", href); 
    link.SetValue(action.Substring(7)); 

    return link.ToString(); 

そしてビューで、私たちはそうのようなヘルパーを呼び出す:

<li>$Html.SnailActivationSwitchLink($item)</li> 

オプション2 - ビュー内のすべての

#if($snail.IsActive) 
    <a href="$Url.For("%{action='ConfirmDeactivate', querystring='id=$snail.ID'}")">Deactivate</a> 
    #else 
    <a href="$Url.For("%{action='ConfirmActivate', querystring='id=$snail.ID'}")">Activate</a> 
    #end 

答えて

1

私にとっては、オプション1を優先します。ヘルパーのロジックをよりエレガントにする方が便利です。

+0

リンクをレンダリングしたい場所のどこでもif/elseを繰り返さないでDRYを続行します。 –

1

私はstrogly /使用オプション1を提案します - に関係なく、あなたのビューがダムください

  • を開発しているビューの数の。 - 単一のビューまたは100のビューには関係ありません。
1

オプション1のサポートが多く、悪魔の主張者を演じる時間があります!

DRYのような概念を適用する主な理由の1つは、アプリケーションをより簡単に変更できるようにすることです。したがって:

  • リンクのテキストを後で変更する必要がある場合はどうなりますか?それともテキストの代わりにイメージを入れたいのですか?リンクの誤字を取り除くためにアプリケーションを再構築する必要が本当にありますか?

  • さらに悪いことに、異なるページでリンクテキストを異なる必要がある場合はどうすればよいですか?各ページに別のヘルパーメソッドを追加しますか?

  • これは私が変更を行っていると仮定しています。マークアップの担当者に画像へのリンクを変更するよう依頼するか、a要素にクラスを追加してスタイルを設定するとどうなりますか?彼はビューファイルを編集するのはとても嬉しいですが、ヘルパーコールを見れば、HTMLがどこから来たのか、どこから変更するのかは分かりません。彼がヘルパークラスを見つけたとしても、彼は必要なことをするためにC#コードを変更する方法を知っていますか?彼がしようとしているのは、少しのテキストを変更することだけです!なぜそれはとても難しいのですか?

  • ヘルパーに2つのメソッドパラメータを追加し、各リンクのテキストを渡すことで、上記の問題のいくつかを軽減できますが、テキストがイメージタグの場合はどうなりますか?私はヘルパーコールで脱出する必要のあるHTMLを手に入れました。それはかなり面倒に見えます。私はまだリンク要素の属性を編集することができませんでしたが、パラメータ/パラメータも追加する必要がありますか?それはどこで止まるのですか?

本質的には、オプション2をほとんどの人に見せることができ、それを理解して変更することができると主張します。条件付きロジックに従うのが簡単な素敵なプレーンHTML。オプション1は、私が必要としない複雑さと挫折を追加します。

+0

非常に良い引数です。 @nickは彼がこのリンクを1つのページでのみ使用することを言及しています。だから2,3,4 - 魅力的ではない。しかし、私は明日オプション2のためにあなたのビューエンジンをSparkやRazorに変更すると、プレーンヘルパーはシングルページに意味をなさないでしょう。 – swapneel

+0

ええ、私はそれが使用されている技術に大きく依存することに同意します。たとえば、Rubyの場合、再コンパイルする必要はありません。これは私のいくつかの点を無効にします。 –

関連する問題