Com a introdução do Razor na última semana, existem agora quatro view engines para o ASP.NET MVC. Os outros são o Spark, NHaml e o tradicional arquivo ASPX template. Este artigo introduz as quatro engines com um foco especial na nova engine, a Razor.
O estilo da view engine ASPX nos leva de volta ao clássico ASP. Códigos usando a síntaxe <%= %> ou a mais nova <%: %> predominam este estilo. Ao longo do tempo os controles ASPC foram adicionados e logo após foram adicionados as páginas masters, mas isto também resulta em um ciclo de vida das páginas muito caro.
Spark, que é também usado no projeto MonoRail Castle, tem uma abordagem um pouco diferente. Enquanto ele suporta placeholders, ele também livremente mistura HTML e código usando atributos e tags especiais. Enquanto isto pode ser um pouco mais verboso, ele tem a vantagem de ser completamente compatível com o XML.
NHaml é uma implementação para o .NET da linguagem de markup Haml. Esta linguagem não usa toda a síntaxe parecendo XML.
A mais nova engine é a Razor da Microsoft. Embora todos os sistemas de templating compartilhem características, este se distingue dos outros três como será mostrado. Diferente do NHaml, ele usa apenas XML para como markup, e ao contrário do Spark ele não vai tão longe com a utilização de código XML. Ele não é exatamente como o ASPX e substitui alguns place holders com o @ symbol seguido por uma expressão ou um bloco de controle. Nenhum marcador final especial é necessário, então o código resultante é bastante conciso.
Por padrão todos os textos de um @ expression é HTML-encoded. Texto dentro de um @ block pode ter "blocos de conteúdos". Identificado por qualquer tag XML, que traz você de volta ao modo HTML da mesma maneira clássica que os desenvolvedores ASP usando o %> html <%=. Se você nao quer que uma tag seja emitida você pode usar a tag <text>.
Como ele usa a síntaxe existentes do VB ou do C#, a Microsoft espera que o Razor seja fácil de aprender. E enquanto qualquer editor de texto pode ser usado, o Visual Studio 2010 será atualizado para oferecer suporte completo para arquivos Razor.
Outra imporante feature presente no Razor é que ele é compatível com frameworks de testes de unidade. Razor templates não exigem um controlador ou host web-server, por isso as views escritas com ele devem ser totalmente testáveis. Enquanto na teoria qualquer coisa pode ser testada, o ASPX torna bastante difícil a codificação de testes e as outras duas engines na realidade não falam sobre a testabilidade em seus respectivos sites.
Todas as quatro engines suportam o conceito de páginas masters, então não há muito o que ser dito sobre este assunto. Views pré compiladas dentro de assembles são suportadas parcialmente pelo ASPX e completamente pelo Razor e pelo Spark. O NHaml atualmente tem isto na lista de features previstas. O que é particularmente interessante sobre o Razor e sobre o Spark é que suas views pré compiladas podem ser usadas em cenários non-hosted como engines de mail-merge.