A sintaxe de barbear fornece uma vantagem convincente na marcação da interface do usuário?
-
26-09-2019 - |
Pergunta
Percebo que Scott Guthrie está começando a mencionar Razor uma Bak Bit No blog dele, mas não tenho tanta certeza de que é uma boa opção para o meu estilo.
É verdade que é um estilo bastante desconhecido para alguém que está acostumado a um tipo "padrão" de marcação do ASP.NET (titulares de locais de conteúdo e código embutido), mas parece muitas páginas adicionais para gerenciar e uma marcação menos clara para mim.
Quais são os sentimentos de outras pessoas sobre isso? É algo que você acredita que deve ser seriamente considerado ao andaimes novas páginas do MVC ou está apenas tentando resolver um problema que não existe?
Solução
Isenção de isenção: Eu sou um dos desenvolvedores da Microsoft no MVC e Razor, então posso ser um pouco tendencioso :)
Projetamos Razor para ser uma linguagem de modelagem concisa que usa apenas a quantidade mínima necessária de caracteres de controle. Eu diria que grandes partes de suas opiniões podem ser expressas com menos caracteres do que o mesmo código usando a sintaxe "tradicional" da Web.
Por exemplo, o snippet de código a seguir na sintaxe ASPX:
<% if(someCondition) { %>
<ol>
<% foreach(var item in Model) { %>
<li><%: item.ToString() %></li>
<% } %>
</ol>
<% } %>
Pode ser expresso o seguinte em Razor:
@if(someCondition) {
<ol>
@foreach(var item in Model) {
<li>@item.ToString()</li>
}
</ol>
}
Enquanto a versão ASPX tem 21 caracteres de transição (o <%
e %>
), a versão Razor tem apenas três (@
)
Eu diria que as vantagens do Razor são as seguintes:
- Sintaxe Concise, que é muito semelhante à maneira como você escreve código C# regular (confira a seguinte postagem recente do blog de Phil Haack comparando ASXP com a Sintaxe Razor: http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx)
- A codificação automática HTML da saída (que ajuda a protegê -lo dos ataques de injeção de HTML)
- Incorporado (embora não 100%) validação da sua marcação, o que ajuda a evitar tags desequilibradas
Os conceitos relacionados à página também mapeiam facilmente do que você tem no ASPX
- Como você pode ver o código embutido ainda é permitido
- As seções (que podem ser opcionais) são equivalentes a espaços reservados para conteúdo
- Páginas de layout em vez de páginas mestre
- Os conceitos de visões completas e parciais são iguais
@functions { ... }
blocos em vez de<script runat="server"> ... </script>
Além disso, Razor tem vários conceitos úteis que eu diria que são melhores do que o que está disponível no ASPX:
@helper
Funções para a criação realmente fácil de funções que emitem marcação@model
palavra -chave para especificar o tipo de modelo da sua visão sem ter que escrever um<%@ Page ...
Diretiva com o nome completo da classe
Gostaria de pensar que abordamos um problema real, que é permitir que você escreva mais facilmente visões concisas e compatíveis com padrões, ao mesmo tempo em que fornece maneiras de refatorar o código comum.
Obviamente, nem todos preferem a sintaxe, e é por isso que também estamos apoiando totalmente o mecanismo ASPX View. Além disso, você pode conferir o Spark e o NHAML, que são dois motores de visão de terceiros que desfrutam de seguidores significativos da comunidade. A postagem do blog a seguir tem uma boa comparação das diferentes ofertas: http://blogs.msdn.com/b/coding4fun/archive/2010/10/04/10070953.aspx
Outras dicas
Pessoalmente, eu realmente aprecio a redução de quantos personagens de fuga são usados. Usando <% %>
fica muito tedioso quando comparado a @{}
e não é tão sintaticamente atraente.
Além disso, escrever uma definição inteira para o CodeBehind e Page é simplificada para um único @model model
.
Como também observado por Marcind, não ter que incluir sempre runat=server
é muito bom também.
No geral, eu realmente aprecio usar o motor de barbear e acho que ele não apenas facilita o desenvolvimento das coisas, mas também facilita a leitura do código.
Podes tentar este conversor. Para mais informações da verificação de informações esta postagem do blog.