Синтаксис Razor обеспечивает непревзойденное преимущество в разметке пользовательского интерфейса?

Я замечаю, что Скотт Гатри начинает упоминать Razor справедливый бит в своем блоге, но я просто не уверен, что это хорошо подходит для моего стиля.

Предоставил ему довольно незнакомый стиль для тех, кто довольно привык к "стандартным" типам разметки ASP.Net(держатели контента и встроенного кода), но он просто чувствует, как много дополнительных страниц для управления и менее четкой разметки мне.

Каковы чувства других людей на нем? Является ли это тем, что, по вашему мнению, следует серьезно рассматривать при создании новых страниц MVC или просто пытается решить проблему, которая не существует?

Ответ 1

[Отказ от ответственности: я являюсь одним из разработчиков Microsoft на MVC и Razor, поэтому я могу быть немного предвзятым:)]

Мы разработали Razor как сжатый язык шаблонов, который использует только минимальное необходимое количество управляющих символов. Я бы сказал, что большие части ваших представлений могут быть выражены с меньшим количеством символов, чем тот же код, используя синтаксис "традиционных" WebForms.

Например, следующий фрагмент кода в синтаксисе ASPX:

<% if(someCondition) { %>
  <ol>
  <% foreach(var item in Model) { %>
     <li><%: item.ToString() %></li>
  <% } %>
  </ol>
<% } %>

В Razor может быть выражено следующим образом:

@if(someCondition) {
   <ol>
   @foreach(var item in Model) {
      <li>@item.ToString()</li>
   }
   </ol>
}

В то время как версия ASPX имеет 21 символ перехода (<% и %>), версия Razor имеет только три (@)

Я бы сказал, что преимущества Razor заключаются в следующем:

  • Краткий синтаксис, который очень похож на то, как вы пишете обычный код на С# (посмотрите следующий недавний пост в блоге Фила Хаака, сравнивающий синтаксис Asxp с Razor: http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx)
  • Автоматическое кодирование HTML-кода (что помогает защитить вас от атак html-инъекций)
  • Встроенная (хотя и не 100%) проверка вашей разметки, которая поможет вам избежать несбалансированных тегов

Концепции, связанные с страницей, также легко сопоставляются с тем, что у вас есть в ASPX

  • Как вы можете видеть, встроенный код все еще разрешен
  • Разделы (которые могут быть необязательными) эквивалентны заполнителям содержимого.
  • Страницы макета вместо основных страниц
  • Понятия полного и частичного представлений одинаковы
  • @functions { ... } вместо <script runat="server"> ... </script>

Кроме того, у Razor есть ряд полезных концепций, которые, я бы сказал, лучше, чем то, что доступно в ASPX:

  • @helper функции для действительно легкого создания функций, которые выделяют разметку
  • @model для указания типа модели вида без необходимости писать директиву <%@ Page ... с полным именем класса

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

Конечно, не каждый предпочитает синтаксис, поэтому мы также полностью поддерживаем механизм просмотра ASPX. Кроме того, вы можете проверить Spark и NHaml, которые являются двумя сторонними механизмами просмотра, которые пользуются значительным сообществом. В следующем блоге хорошее сравнение различных предложений: http://blogs.msdn.com/b/coding4fun/archive/2010/10/04/10070953.aspx

Ответ 2

Лично я очень ценю сокращение количества escape-символов. Использование <% %> становится очень утомительным по сравнению с @{} и не так синтаксически привлекательно.

Кроме того, запись целого определения для codebehind и страницы упрощается до одного @model model.

Как также отмечено marcind, не обязательно всегда включать runat=server.

В целом, я очень ценю использование движка Razor и считаю, что это не только облегчает мне разработку, но и делает код более удобным для чтения.