ASP.NET MVC Ver Comparación del Motor


He estado buscando en SO & Google un desglose de los diversos Motores de vista disponibles para ASP.NET MVC, pero no han encontrado mucho más que simples descripciones de alto nivel de lo que es un motor de vista.

No estoy buscando necesariamente "lo mejor" o "lo más rápido", sino más bien algunas comparaciones del mundo real de las ventajas / desventajas de los principales jugadores (por ejemplo, el motor de vista predeterminado de Webformview, motores de vista MvcContrib, etc.).) para diversas situaciones. Creo que esto sería muy útil en determinar si cambiar del motor predeterminado sería ventajoso para un proyecto o grupo de desarrollo determinado.

¿Alguien ha encontrado tal comparación?

Author: casperOne, 2009-09-20

6 answers

ASP.NET Motores de vista MVC (Wiki de la Comunidad)

Dado que una lista completa no parece existir, comencemos con una aquí. Esto puede ser de gran valor para el ASP.NET Comunidad MVC si las personas agregan su experiencia (esp. cualquier persona que haya contribuido a uno de estos). Cualquier cosa que implemente IViewEngine (por ejemplo, VirtualPathProviderViewEngine) es juego limpio aquí. Solo tienes que alfabetizar los nuevos motores de vista (dejando WebFormViewEngine y Razor en la parte superior), y tratar de ser objetivo en comparación.


Sistema.Web.Mvc.Motor de búsqueda de forma WEB

Objetivos de diseño:

Un motor de vistas que se utiliza para representar un Formularios Web página a la respuesta.

Ventajas:

  • ubicuo ya que se envía con ASP.NET MVC
  • experiencia familiar para ASP.NET desarrolladores
  • IntelliSense
  • puede elegir cualquier idioma con un proveedor de código (por ejemplo, C#, VB.NET, F#, Boo, Nemerle)
  • a petición compilation or precompiled views

Contras:

  • el uso se confunde por la existencia de "clásico ASP.NET" patrones que ya no se aplican en MVC (por ejemplo, ViewState PostBack)
  • puede contribuir al anti-patrón de"sopa de etiquetas"
  • la sintaxis de bloques de código y la tipificación fuerte pueden interferir
  • IntelliSense impone el estilo no siempre apropiado para bloques de código inline
  • puede ser ruidoso al diseñar simple plantillas

Ejemplo:

<%@ 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>
<%}%>

Sistema.Web.Navaja

Objetivos de diseño:

Ventajas:

  • Compacto, Expresivo y Fluido
  • Fácil de aprender
  • no Es un nuevo lenguaje
  • Tiene gran Intelisense
  • Unidad comprobable
  • Omnipresente, se envía con ASP.NET MVC

Contras:

  • Crea un problema ligeramente diferente de la "sopa de etiquetas" mencionada anteriormente. Donde el las etiquetas de servidor en realidad proporcionan una estructura alrededor del código de servidor y no de servidor, Razor confunde HTML y código de servidor, haciendo que el desarrollo de HTML o JS sea un desafío (ver Ejemplo #1), ya que termina teniendo que "escapar" de las etiquetas HTML y / o JavaScript bajo ciertas condiciones muy comunes.
  • Encapsulación pobre+reuseability: Es poco práctico llamar a una plantilla de razor como si fuera un método normal-en la práctica razor puede llamar al código, pero no viceversa, lo que puede fomentar la mezcla de código y representación.
  • La sintaxis está muy orientada a html; generar contenido no html puede ser complicado. A pesar de esto, el modelo de datos de razor es esencialmente solo concatenación de cadenas, por lo que los errores de sintaxis y anidamiento no se detectan estática ni dinámicamente VS.NET la ayuda del tiempo de diseño mitiga esto un poco. La capacidad de mantenimiento y refactorabilidad puede sufrir debido a esto.
  • Ninguna API documentada, http://msdn.microsoft.com/en-us/library/system.web.razor.aspx

Con Ejemplo #1 (observe la colocación de "string []..."):

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

Bellevue

Objetivos de diseño:

  • Respete el HTML como lenguaje de primera clase en lugar de tratarlo como "solo texto".
  • No te metas con mi HTML! El código de enlace de datos (código Bellevue) debe estar separado del HTML.
  • Enforce strict Model-View separación

Brail

Objetivos de diseño:

El motor de vista de Brail ha sido portado de monorraíl a trabajar con el Microsoft ASP.NET Marco MVC. Para una introducción a Brail, ver el documentación sobre el proyecto del castillo website .

Ventajas:

  • modelado según la"sintaxis de python amigable para la muñeca"
  • Vistas compiladas bajo demanda (pero sin precompilación disponible)

Contras:

  • diseñado para ser escrito en el idioma Boo

Ejemplo:

<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

Usos Hasic VB.NET ' s literales XML en lugar de cadenas como la mayoría de los otros motores de vista.

Ventajas:

  • Comprobación en tiempo de compilación de XML válido
  • Coloración de sintaxis
  • Intellisense completo
  • Vistas compiladas
  • Extensibilidad usando clases CLR regulares, funciones, etc
  • Seamless composiability and manipulation since it's regular VB.NET código
  • Unidad comprobable

Contras:

  • Rendimiento: Construye el DOM completo antes de enviarlo al cliente.

Ejemplo:

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

NDjango

Objetivos de diseño:

NDjango es una implementación de la Django Template Language en. NET plataforma, utilizando el F # language.

Ventajas:


NHaml

Objetivos de diseño:

Puerto.NET de Rails Haml view engine. Desde el sitio web de Haml :

Haml es un lenguaje de marcado que se utiliza para describir limpia y simplemente la XHTML de cualquier documento web, sin el uso de código en línea... Haml evita el necesidad de codificar explícitamente XHTML en la plantilla, porque en realidad es una descripción abstracta del XHTML, con algún código para generar dinámica contenido.

Ventajas:

  • estructura concisa (es decir, D. R. Y.)
  • bien sangrados
  • borrar estructura
  • C # Intellisense (para VS2008 sin ReSharper)

Contras:

  • una abstracción de XHTML en lugar de aprovechar la familiaridad del marcado
  • No Intellisense para VS2010

Ejemplo:

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

NVelocityViewEngine (MvcContrib)

Objetivos de diseño:

Un motor de vistas basado en NVelocity que es un puerto. NET de la popular Java proyecto Velocidad.

Ventajas:

  • fácil de leer / escribir
  • código de vista conciso

Contras:

  • número limitado de métodos auxiliares disponibles en la vista
  • no tiene integración automática con Visual Studio (IntelliSense, comprobación de vistas en tiempo de compilación o refactorización)

Ejemplo:

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

Afilados

Objetivos de diseño:

SharpTiles es un puerto parcial de JSTL combinado con el concepto detrás de las fichas framework (a partir de Mile stone 1).

Ventajas:

  • familiar para los desarrolladores de Java
  • Bloques de código de estilo XML

Contras:

  • ...

Ejemplo:

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

Motor de Spark View

Objetivos de diseño:

La idea es permitir que el html dominar el flujo y el código para encajar sin problemas.

Ventajas:

  • Produce plantillas más legibles
  • C # Intellisense (para VS2008 sin ReSharper)
  • Plug-in SparkSense para VS2010 (funciona con ReSharper)
  • Proporciona una poderosa función de enlaces para deshacerse de todo el código en sus vistas y le permite inventar fácilmente sus propias etiquetas HTML

Contras:

  • No hay una separación clara de lógica de plantilla a partir del marcado literal (esto se puede mitigar con prefijos de espacio de nombres)

Ejemplo:

<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

Objetivos de diseño:

  • Ligero. No se crean clases de página.
  • [30] Rápido. Las plantillas se escriben en el flujo de salida de respuesta.
  • En caché. Las plantillas se almacenan en caché, pero utilizan un FileSystemWatcher para detectar cambios de archivo.
  • Dinámico. Las plantillas pueden ser generado sobre la marcha en código.
  • Flexible. Las plantillas se pueden anidar en cualquier nivel.
  • En línea con los principios MVC. Promueve la separación de UI y Negocios Lógica. Todos los datos se crean antes de tiempo, y pasado a la plantilla.

Ventajas:

  • familiar para los desarrolladores de Java StringTemplate

Contras:

  • la sintaxis simplista de la plantilla puede interferir con la salida prevista (por ejemplo, jQuery conflicto)

Golpes de Ala

Wing Beats es un DSL interno para crear XHTML. Se basa en F# e incluye un ASP.NET MVC view engine, pero también se puede utilizar únicamente por su capacidad de crear XHTML.

Ventajas:

  • Comprobación en tiempo de compilación de XML válido
  • Coloración de sintaxis
  • Intellisense completo
  • Vistas compiladas
  • Extensibilidad usando clases CLR regulares, funciones, etc
  • Seamless componability and manipulation since It's regular F # code
  • Unidad comprobable

Contras:

  • Realmente no escribes HTML, sino código que representa HTML en un DSL.

XsltViewEngine (MvcContrib)

Objetivos de diseño:

Construye vistas desde XSLT familiar

Ventajas:

  • ampliamente ubicuo
  • lenguaje de plantilla familiar para XML desarrolladores
  • Basado en XML
  • probado con el tiempo
  • Los errores de sintaxis y anidamiento de elementos se pueden detectar estáticamente.

Contras:

  • el estilo del lenguaje funcional dificulta el control de flujo
  • XSLT 2.0 es (probablemente?) no soportado. (XSLT 1.0 es mucho menos práctico).

 428
Author: mckamey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:26

Mi elección actual es Razor. Es muy limpio y fácil de leer y mantiene las páginas de vista muy fáciles de mantener. También hay soporte intellisense que es realmente genial. ALos, cuando se utiliza con ayudantes web es muy potente también.

Para proporcionar una muestra simple:

@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>

Y ahí lo tienen. Eso es muy limpio y fácil de leer. Por supuesto, ese es un ejemplo simple, pero incluso en páginas y formularios complejos sigue siendo muy fácil de leer y entender.

En cuanto a los contras? Bueno, hasta ahora (soy nuevo en esto) al usar algunos de los ayudantes para formularios hay una falta de soporte para agregar una referencia de clase CSS, lo que es un poco molesto.

Gracias Nathj07

 18
Author: nathj07,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-13 19:21:15

Sé que esto realmente no responde a su pregunta, pero los diferentes Motores de vista tienen diferentes propósitos. El Spark View Engine, por ejemplo, tiene como objetivo eliminar la "sopa de etiquetas" de tus vistas intentando que todo sea fluido y legible.

Su mejor apuesta sería simplemente mirar algunas implementaciones. Si parece atractivo para la intención de su solución, pruébelo. Puede mezclar y combinar los motores de vista en MVC, por lo que no debería ser un problema si decide no ir con un motor.

 11
Author: MunkiPhD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-20 15:49:23

Comprueba esto SharpDOM . Este es un dsl interno de c# 4.0 para generar html y también asp.net motor de visión mvc.

 9
Author: Anton Shelin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-30 21:10:34

Me gusta ndjango. Es muy fácil de usar y muy flexible. Puede ampliar fácilmente la funcionalidad de visualización con etiquetas y filtros personalizados. Creo que "muy ligado a F#" es más bien una ventaja que una desventaja.

 5
Author: rdovhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-25 19:48:57

Creo que esta lista también debe incluir muestras de cada motor de vista para que los usuarios puedan obtener una idea de cada uno sin tener que visitar cada sitio web.

Las imágenes dicen mil palabras y las muestras de marcado son como capturas de pantalla para los motores de vista:) Así que aquí hay una de mi favorito Spark View Engine

<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>
 4
Author: mythz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-12 21:01:48