3

私と同僚は、ページ上にリンクを生成する方法について話し合っています。HTMLヘルパーを使用する必要がありますか、それともビューに非常に単純なビューロジックを保持する必要がありますか?

このプロジェクトでは、CastleMonorailと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
4

3 に答える 3

1

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

于 2010-12-01T11:03:05.480 に答える
1

私は、あなたが開発しているビューの数に関係なく、オプション1-をひどく提案/使用します

  • あなたの見方をばかげてください。-1つのビューまたは100のビューには関係ありません。
于 2010-12-01T12:22:24.320 に答える
1

オプション1のサポートがたくさんあります-悪魔の代弁者を演じる時が来ました!

DRYのような概念を適用する主な理由の1つは、アプリケーションの変更を容易にし、保守しやすくすることです。それで:

  • リンク内のテキストを後で変更する必要がある場合はどうなりますか?または、テキストの代わりに画像を配置したいですか?リンクのタイプミスを削除するために、本当にアプリケーションを再構築する必要がありますか?

  • さらに悪いことに、リンクテキストをページごとに変える必要がある場合はどうでしょうか。次に、ページごとに別のヘルパーメソッドを追加しますか?

  • それは、変化を起こしているのは私だと仮定しています。マークアップの第一人者に画像へのリンクを変更するように依頼したり、要素にクラスを追加してスタイルを設定したりするとどうなりますか?彼はビューファイルを編集することに完全に満足していますが、ヘルパーの呼び出しを見た場合、HTMLがどこから来て、どこで変更するのかわかりません。ヘルパークラスを見つけたとしても、必要なことを実行するためにC#コードを変更する方法を知っているでしょうか。彼がやろうとしているのは、テキストを少し変更することだけです。なぜそんなに難しいのですか?

  • ヘルパーに2つのメソッドパラメーターを追加し、各リンクのテキストを渡すことで、上記の問題のいくつかを軽減できますが、テキストが画像タグの場合はどうなりますか?これで、ヘルパー呼び出しでエスケープする必要のあるHTMLができました。これはかなり厄介に見えます。それでもリンク要素の属性を編集できませんでした。そのためのパラメーターも追加する必要がありますか?どこで止まりますか?

本質的に、私はほとんどの人にオプション2を示すことができ、彼らはそれを理解し、それを変更することができると主張します。いくつかの簡単な条件付きロジックを備えた素晴らしいプレーンHTML。オプション1は、私が必要としない複雑さと抽象化を追加します。

于 2010-12-01T14:04:05.123 に答える