Pergunta

Eu tenho procurado em SO & Google para uma repartição dos vários vêem os motores disponíveis para ASP.NET MVC, mas não encontrei muito mais do que descrições de alto nível simples do que um motor a vista é.

Eu não estou necessariamente procurando por "melhor" ou "mais rápido", mas sim algumas comparações reais de vantagens / desvantagens dos principais jogadores (por exemplo, o WebFormViewEngine padrão, MvcContrib vêem os motores, etc.) para várias situações. Eu acho que isso seria muito útil para determinar se a mudança de motor padrão seria vantajoso para um determinado projeto ou grupo de desenvolvimento.

Já alguém encontrou tal comparação?

Foi útil?

Solução

ASP.NET MVC Visualização de Motores (comunidade wiki)

Uma vez que uma lista abrangente não parece existir, vamos começar um aqui no SO. Isto pode ser de grande valor para a comunidade ASP.NET MVC se as pessoas adicionar sua experiência (esp. Qualquer um que contribuiu para um destes). Qualquer coisa implementação IViewEngine (por exemplo VirtualPathProviderViewEngine) é um jogo justo aqui. Apenas alfabetizar nova visão Motores (deixando WebFormViewEngine e Razor no topo), e tentar ser objetivo em comparações.


System.Web.Mvc.WebFormViewEngine

Design Metas:

Um mecanismo de exibição que é usado para processar uma página Web Forms para a resposta.

Pros:

  • ubiquitous, uma vez que vem com o ASP.NET MVC
  • experiência familiar para desenvolvedores ASP.NET
  • IntelliSense
  • pode escolher qualquer língua com um provedor CodeDom (por exemplo, C #, VB.NET, F #, Boo, Nemerle)
  • sob demanda compilação ou pré-compilado vistas

Contras:

  • uso é confundido pela existência de padrões "clássico ASP.NET", que já não se aplicam em MVC (por exemplo ViewState PostBack)
  • pode contribuir para anti-padrão de "tag sopa"
  • sintaxe code-block e tipagem forte pode ficar no caminho
  • IntelliSense impõe estilo nem sempre apropriadas para blocos de código em linha
  • pode ser barulhento quando projetar modelos simples

Exemplo:

<%@ Control Inherits="System.Web.Mvc.ViewPage<IEnumerable<Product>>" %>
<% if(model.Any()) { %>
<ul>
    <% foreach(var p in model){%>
    <li><%=p.Name%></li>
    <%}%>
</ul>
<%}else{%>
    <p>No products available</p>
<%}%>

System.Web.Razor

Design Metas:

Pros:

  • Compact, expressivo, e Fluid
  • Fácil de Aprender
  • Não é uma nova linguagem
  • Tem grande Intellisense
  • Unidade Testable
  • Ubiquitous, navios com ASP.NET MVC

Contras:

  • Cria um problema ligeiramente diferente do "tag sopa" mencionado acima. Onde as tags do servidor, na verdade, fornecer a estrutura em torno do código não-servidor servidor e, Navalha confunde HTML e código do servidor, tornando HTML puro ou desenvolvimento JS desafio (ver Exemplo Con # 1) como você acabam por ter de "escape" HTML e / ou JavaScript etiquetas sob certas condições muito comum.
  • Pobre encapsulamento + reuseability:. É impraticável para chamar um modelo de navalha como se fosse um método normal - na prática de barbear pode chamar o código, mas não vice-versa, o que pode estimular a mistura de código e apresentação
  • A sintaxe é muito orientada html; geração de conteúdo não-html pode ser complicado. Apesar disso, o modelo de dados da navalha é essencialmente apenas string de concatenação, de modo sintaxe e erros de nidificação são nem estaticamente nem dinamicamente detectado, embora VS.NET de tempo de design ajuda atenua esta um pouco. Manutenção e refactorability podem sofrer devido a isso.
  • Não documentado API , http : //msdn.microsoft.com/en-us/library/system.web.razor.aspx

Con Exemplo # 1 (aviso a colocação de "string [] ..."):

@{
    <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
    foreach (var person in teamMembers)
    {
        <p>@person</p>
    }
}

Bellevue

Projeto objetivos:

  • O respeito HTML como linguagem de primeira classe ao invés de tratá-la como "texto apenas".
  • Não mexa com meu HTML! O código de ligação de dados (código de Bellevue) deve ser separado do HTML.
  • Aplicar estrita Model-View separação

Brail

Design Metas:

O mecanismo de exibição Brail foi portado de MonoRail ao trabalho com o Microsoft ASP.NET MVC Framework.Para uma introdução ao Brail, consulte o documentação sobre o projeto Castelo website .

Pros:

  • modelado após "sintaxe python-friendly pulso"
  • On-demand vistas compilado (mas sem pré-compilação disponível)

Contras:

  • projetado para ser escrito na linguagem Boo

Exemplo:

<html>    
<head>        
<title>${title}</title>
</head>    
<body>        
     <p>The following items are in the list:</p>  
     <ul><%for element in list:    output "<li>${element}</li>"%></ul>
     <p>I hope that you would like Brail</p>    
</body>
</html>

Hasic

Hasic usa literais XML do VB.NET, em vez de cordas como a maioria dos outros motores de vista.

Pros:

  • de tempo de compilação verificação de XML válido
  • Coloração de sintaxe
  • intellisense completa
  • vistas compilados
  • extensibilidade usando classes CLR regulares, funções, etc
  • Seamless modularidade e manipulação, uma vez que de código VB.NET regulares
  • Unidade testável

Contras:

  • Performance: Constrói todo o DOM antes de enviá-lo para o cliente.

Exemplo:

Protected Overrides Function Body() As XElement
    Return _
    <body>
        <h1>Hello, World</h1>
    </body>
End Function

NDjango

Design Metas:

NDjango é uma implementação do Django Template Idioma no .NET plataforma, usando o F # linguagem .

Pros:


NHaml

Design Metas:

porta NET do Rails Haml mecanismo de exibição. De o Haml website :

Haml é uma linguagem de marcação que é usada de forma limpa e simplesmente descrever o XHTML de qualquer documento web, sem a uso de código embutido ... Haml evita a necessidade de codificação explicitamente XHTML em o modelo, porque é realmente uma descrição abstrata do XHTML, com algum código para gerar dinâmica conteúdo.

Pros:

  • estrutura concisa (isto é D.R.Y.)
  • bem recuado
  • estrutura clara
  • C # IntelliSense (para VS2008 sem ReSharper)

Contras:

  • uma abstração de XHTML em vez de aproveitar a familiaridade da marcação
  • No Intellisense para VS2010

Exemplo:

@type=IEnumerable<Product>
- if(model.Any())
  %ul
    - foreach (var p in model)
      %li= p.Name
- else
  %p No products available

NVelocityViewEngine (Bonfanti)

Design Metas:

Um mecanismo de exibição com base em NVelocity que é uma porta .NET do projeto Java populares Velocity .

Pros:

  • fácil de leitura / gravação
  • Código visão concisa

Contras:

  • número limitado de métodos auxiliares disponíveis na vista
  • não tem automaticamente integração do Visual Studio (IntelliSense, tempo de compilação verificação de pontos de vista, ou refatoração)

Exemplo:

#foreach ($p in $viewdata.Model)
#beforeall
    <ul>
#each
    <li>$p.Name</li>
#afterall
    </ul>
#nodata 
    <p>No products available</p>
#end

SharpTiles

Design Metas:

SharpTiles é uma porta parcial de JSTL combinado com o conceito atrás Azulejos quadro (a partir de Mile pedra 1).

Pros:

  • familiar para desenvolvedores Java
  • blocos de código de estilo XML

Contras:

  • ...

Exemplo:

<c:if test="${not fn:empty(Page.Tiles)}">
  <p class="note">
    <fmt:message key="page.tilesSupport"/>
  </p>
</c:if>

Faísca Ver Motor

Design Metas:

A idéia é permitir que o html para dominar o fluxo e o código para caber sem problemas.

Pros:

  • Produz modelos mais legíveis
  • C # IntelliSense (para VS2008 sem ReSharper)
  • SparkSense plug-in para VS2010 (funciona com ReSharper)
  • Ligações poderosa para se livrar de todo o código em seus pontos de vista e permite que você inventar facilmente suas próprias tags HTML

Contras:

  • No separação clara da lógica do modelo de marcação literal (isso pode ser atenuado por prefixos de namespace)

Exemplo:

<viewdata products="IEnumerable[[Product]]"/>
<ul if="products.Any()">
    <li each="var p in products">${p.Name}</li>
</ul>
<else>
    <p>No products available</p>
</else>

<Form style="background-color:olive;">
    <Label For="username" />
    <TextBox For="username" />
    <ValidationMessage For="username" Message="Please type a valid username." />
</Form>

StringTemplate Ver Motor MVC

Design Metas:

  • Leve. Não há classes de páginas são criadas.
  • Rápido. Os modelos são gravados para o fluxo de saída de resposta.
  • Em cache. Os modelos são armazenados em cache, mas utilizam um FileSystemWatcher para detectar alterações de arquivo.
  • Dinâmica. Os modelos podem ser gerados em tempo real no código.
  • flexível. Os modelos podem ser aninhados em qualquer nível.
  • Em consonância com os princípios do MVC. Promove a separação da interface do usuário e Negócios Lógica. Todos os dados são criados antes do tempo, e passada para o modelo.

Pros:

  • familiar aos desenvolvedores StringTemplate Java

Contras:

  • sintaxe do modelo simplista pode interferir com o resultado pretendido (por exemplo jQuery conflito )

Ala bate

batidas de asas é uma DSL interna para a criação de XHTML. É baseado em F # e inclui um mecanismo de exibição ASP.NET MVC, mas também pode ser usado apenas por sua capacidade de criar XHTML.

Pros:

  • de tempo de compilação verificação de XML válido
  • Coloração de sintaxe
  • intellisense completa
  • vistas compilados
  • extensibilidade usando classes CLR regulares, funções, etc
  • Seamless modularidade e manipulação desde a sua regulares código F #
  • Unidade testável

Contras:

  • Você não realmente escrever HTML mas o código que representa HTML em uma DSL.

XsltViewEngine (Bonfanti)

Design Metas:

Constrói vistas a partir XSLT familiarizado

Pros:

  • amplamente onipresente
  • familiarizado modelo de linguagem para desenvolvedores XML
  • baseada em XML
  • testada pelo tempo
  • Os erros de sintaxe e elemento de nidificação pode ser estaticamente detectado.

Contras:

  • funcionais estilo linguagem torna o controle de fluxo difícil
  • XSLT 2.0 é (provavelmente?) Não é suportado. (XSLT 1.0 é mmuito menos prático).

Outras dicas

A minha escolha atual é Navalha. É muito limpo e fácil de ler e mantém as páginas vista muito fácil de manter. Há também suporte intellisense que é realmente grande. Alos, quando usado com ajudantes web é realmente poderosa também.

Para fornecer uma amostra simples:

@Model namespace.model
<!Doctype html>
<html>
<head>
<title>Test Razor</title>
</head>
<body>
<ul class="mainList">
@foreach(var x in ViewData.model)
{
<li>@x.PropertyName</li>
}
</ul>
</body>

E aí está. Isso é muito limpo e fácil de ler. Concedido, isso é um exemplo simples, mas mesmo em páginas complexas e formas ainda é muito fácil de ler e entender.

Quanto aos contras? Bem até agora (eu sou novo para isso) ao usar alguns dos ajudantes de formas, há uma falta de suporte para a adição de uma referência de classe CSS que é um pouco chato.

Graças Nathj07

Eu sei que isso realmente não responder à sua pergunta, mas diferentes vêem os motores têm finalidades diferentes. A faísca Ver Motor , por exemplo, tem como objetivo livrar os seus pontos de vista de "tag sopa", tentando fazer tudo fluente e legível.

Sua melhor aposta seria para apenas olhar para algumas implementações. Se parece atraente para a intenção de sua solução, experimentá-lo. Você pode misturar e ver jogo motores em MVC, por isso não deve ser um problema se você decidir não ir com um motor específico.

Marque esta SharpDOM . Este é um c # 4.0 DSL interna para gerar html e também asp.net mvc mecanismo de exibição.

Gosto NDjango . É muito fácil de usar e muito flexível. Você pode facilmente estender a funcionalidade vista com etiquetas e filtros personalizados. Eu acho que "muito amarrado a F #" é bastante vantagem do que desvantagem.

Eu acho que esta lista também deve incluir amostras de cada mecanismo de exibição para que os usuários podem obter um sabor de cada sem ter que visitar cada site.

Imagens dizem mais que mil palavras e exemplos de marcação são como screenshots para motores vista :) Então aqui está um da minha faísca favorito Ver Motor

<viewdata products="IEnumerable[[Product]]"/>
<ul if="products.Any()">
  <li each="var p in products">${p.Name}</li>
</ul>
<else>
  <p>No products available</p>
</else>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top