Логика MVC, представления и помощники - конкретная история - PullRequest
3 голосов
/ 01 декабря 2010

Я и коллега обсуждаем, как создать ссылку на странице.Должны ли мы использовать помощники html или сохранить очень простую логику вида в виде?

Для этого проекта мы используем Castle Monorail и механизм просмотра NVelocity.Я был бы признателен всем, кто рассматривает оба варианта ниже и высказывает свое мнение.

В этой статье ссылка в настоящее время используется только на одной странице.

Вариант 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

Ответы [ 3 ]

1 голос
/ 01 декабря 2010

Я буду предлагать / использовать вариант 1 - независимо от количества просмотров, которые вы разрабатываете

  • Сделай свой взгляд тупым. - не имеет значения для одного представления или 100 просмотров.
1 голос
/ 01 декабря 2010

Значительная поддержка Варианта 1 - время играть в адвента дьявола!

Одна из основных причин применения таких концепций, как DRY, заключается в том, чтобы сделать приложение легче изменяемым / более обслуживаемым.Итак:

  • Что, если текст в ссылке нужно изменить позже?Или я хочу поместить изображение вместо текста?Действительно ли я хочу перестроить приложение, чтобы удалить опечатку в ссылке?

  • Хуже того, что, если текст ссылки должен отличаться на разных страницах?Затем я добавляю другой вспомогательный метод для каждой страницы?

  • Предполагается, что это я делаю изменения.Что если я попрошу моего гуру разметки изменить ссылку на изображение или добавить класс к элементу a, чтобы придать ему стиль?Он совершенно счастлив редактировать файлы представления, но если он увидит вызов помощника, он не будет знать, откуда взялся HTML-код и где его изменить.Даже если он найдет вспомогательный класс, узнает ли он, как изменить код C #, чтобы он делал то, что ему нужно?Все, что он пытается сделать, это немного изменить текст!Почему это должно быть так сложно?

  • Я мог бы смягчить некоторые из вышеперечисленных проблем, добавив два параметра метода в помощник и передав текст для каждой ссылки, но что еслитекст был тег изображения?Теперь у меня есть HTML, который мне нужно скрыть при вызове помощника - это будет выглядеть довольно грязно.Я до сих пор не могу отредактировать атрибуты элемента ссылки, должен ли я добавить параметр / параметры для этого?Где это останавливается?

По сути, я буду утверждать, что я могу показать Вариант 2 большинству людей, и они поймут его и смогут его изменить.Хороший простой HTML с простой в использовании условной логикой.Вариант 1 добавляет сложность и абстракцию, которая мне не нужна.

1 голос
/ 01 декабря 2010

Для меня я предпочитаю вариант 1. Удобнее делать логику на помощнике и более элегантно.

...