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

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

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

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

3 ответа

Решение

[Отказ от ответственности: я один из разработчиков 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 заключаются в следующем:

  1. Краткий синтаксис, который очень похож на то, как вы пишете обычный код на C# (посмотрите следующее недавнее сообщение в блоге Фила Хаака, сравнивающее Asxp с синтаксисом Razor: http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx)
  2. Автоматическая HTML-кодировка вывода (которая помогает защитить вас от html-атак)
  3. Встроенная (но не 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

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

Более того, написание целого определения для кода и страницы упрощается до одного @model model,

Как также отметил Марсинд, не всегда нужно включать runat=server тоже очень приятно.

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

Вы можете попробовать этот конвертер. Для получения дополнительной информации проверьте этот пост в блоге.

Другие вопросы по тегам