J'ai consulté sur SO & Google pour une liste détaillée des différents moteurs de visualisation disponibles pour ASP.NET MVC, mais je n'ai pas trouvé beaucoup plus que de simples descriptions de haut niveau de ce qu'est un moteur de visualisation.
Je ne cherche pas nécessairement le "meilleur" ou le "plus rapide", mais plutôt certaines comparaisons dans le monde réel des avantages/inconvénients des principaux acteurs (par exemple, WebFormViewEngine par défaut, les moteurs de vue MvcContrib, etc.) dans diverses situations. Je pense que cela serait vraiment utile pour déterminer si le remplacement du moteur par défaut serait avantageux pour un projet ou un groupe de développement donné.
Quelqu'un at-il rencontré une telle comparaison?
Puisqu'une liste complète ne semble pas exister, commençons-en une ici sur SO. Cela peut être d'une grande utilité pour la communauté ASP.NET MVC si les personnes ajoutent leur expérience (en particulier à ceux qui ont contribué à l'une de celles-ci). Tout ce qui implémente IViewEngine
(par exemple VirtualPathProviderViewEngine
) est un jeu juste ici. Alphabétisez simplement les nouveaux moteurs de vue (en laissant WebFormViewEngine et Razor en haut) et essayez d’être objectif dans les comparaisons.
System.Web.Mvc.WebFormViewEngine
Objectifs de conception:
Un moteur de vue utilisé pour rendre une page Web Forms à la réponse.
Avantages:
Les inconvénients:
Exemple:
<%@ 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>
<%}%>
Objectifs de conception:
Avantages:
Les inconvénients:
Exemple con # 1 (notez le placement de "string [] ..."):
@{
<h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
foreach (var person in teamMembers)
{
<p>@person</p>
}
}
Objectifs de conception:
- Respectez le langage HTML en tant que langage de première classe, au lieu de le traiter comme "juste du texte".
- Ne plaisante pas avec mon HTML! Le code de liaison de données (code Bellevue) doit être séparé du code HTML.
- Appliquer une séparation modèle-vue stricte
Objectifs de conception:
Le moteur de visualisation Brail a été porté à partir de MonoRail pour fonctionner avec Microsoft ASP.NET MVC Framework. Pour une introduction à Brail, voir la documentation sur le site Web du projet Castle .
Avantages:
Les inconvénients:
Exemple:
<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 utilise les littéraux XML de VB.NET au lieu de chaînes comme la plupart des autres moteurs de vue.
Avantages:
Les inconvénients:
Exemple:
Protected Overrides Function Body() As XElement
Return _
<body>
<h1>Hello, World</h1>
</body>
End Function
Objectifs de conception:
NDjango est une implémentation de Django Template Language sur la plate-forme .NET, à l'aide du langage F # .
Avantages:
WebFormViewEngine
Objectifs de conception:
Port .NET du moteur de vue Haml Rails. De le site web de Haml :
Haml est un langage de balisage utilisé pour décrire proprement et simplement le XHTML de tout document Web, sans utiliser de code en ligne ... Haml évite de coder explicitement XHTML dans le modèle, car il s'agit en fait d'une description abstraite du XHTML. , avec du code pour générer du contenu dynamique.
Avantages:
Les inconvénients:
Exemple:
@type=IEnumerable<Product>
- if(model.Any())
%ul
- foreach (var p in model)
%li= p.Name
- else
%p No products available
NVelocityViewEngine (MvcContrib)
Objectifs de conception:
Un moteur de vue basé sur NVelocity qui est un port .NET du projet Java très répandu Velocity .
Avantages:
Les inconvénients:
Exemple:
#foreach ($p in $viewdata.Model)
#beforeall
<ul>
#each
<li>$p.Name</li>
#afterall
</ul>
#nodata
<p>No products available</p>
#end
Objectifs de conception:
SharpTiles est un port partiel de JSTL combiné avec le concept derrière le cadre de tuiles (à partir de Mile stone 1).
Avantages:
Les inconvénients:
Exemple:
<c:if test="${not fn:empty(Page.Tiles)}">
<p class="note">
<fmt:message key="page.tilesSupport"/>
</p>
</c:if>
Objectifs de conception:
L'idée est de permettre au code HTML de dominer le flux et au code de s'adapter parfaitement.
Avantages:
Les inconvénients:
Exemple:
<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>
MVC de StringTemplate View Engine
Objectifs de conception:
- Poids léger. Aucune classe de page n'est créée.
- Vite. Les modèles sont écrits dans le flux de sortie de réponse.
- En cache. Les modèles sont mis en cache, mais utilisent FileSystemWatcher pour détecter les modifications de fichier.
- Dynamique. Les modèles peuvent être générés à la volée dans le code.
- Souple. Les modèles peuvent être imbriqués à n'importe quel niveau.
- Conformément aux principes de MVC. Favorise la séparation de l'interface utilisateur et de la logique métier. Toutes les données sont créées à l'avance et transmises au modèle.
Avantages:
Les inconvénients:
Wing Beats est un DSL interne pour la création de XHTML. Il est basé sur F # et comprend un moteur de vue ASP.NET MVC, mais peut également être utilisé uniquement pour sa capacité à créer du XHTML.
Avantages:
Les inconvénients:
Objectifs de conception:
Construit des vues à partir de XSLT familier
Avantages:
Les inconvénients:
Mon choix actuel est Razor. Il est très propre et facile à lire et maintient les pages de vue très faciles à maintenir. Il y a aussi le support intellisense qui est vraiment génial. ALos, quand il est utilisé avec des assistants Web, il est également très puissant.
Pour fournir un exemple 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>
Et voila. C'est très propre et facile à lire. Certes, c’est un exemple simple, mais même sur des pages et des formulaires complexes, il est toujours très facile à lire et à comprendre.
Quant aux inconvénients? Jusqu’à présent (pour la première fois, je suis novice), lors de l’utilisation de certains des aides pour les formulaires, l’ajout d’une référence de classe CSS est un peu insuffisant, ce qui est un peu gênant.
Merci Nathj07
Je sais que cela ne répond pas vraiment à votre question, mais différents moteurs de visualisation ont des objectifs différents. Le Spark View Engine , par exemple, vise à vous débarrasser de votre vision de "tag soup" en essayant de tout rendre fluide et lisible.
Votre meilleur choix serait simplement de regarder quelques implémentations. Si cela semble attrayant pour l’intention de votre solution, essayez-le. Vous pouvez combiner les moteurs de vue dans MVC. Cela ne devrait donc pas être un problème si vous décidez de ne pas utiliser un moteur spécifique.
Vérifiez ceci SharpDOM . Il s’agit d’un dsl interne c # 4.0 permettant de générer du code HTML ainsi que du moteur de vue asp.net mvc.
J'aime ndjango . Il est très facile à utiliser et très flexible. Vous pouvez facilement étendre la fonctionnalité d'affichage avec des étiquettes et des filtres personnalisés. Je pense que "fortement lié à F #" est plutôt un avantage qu'un désavantage.
Je pense que cette liste devrait également inclure des exemples de chaque moteur d'affichage afin que les utilisateurs puissent en avoir une idée sans avoir à visiter chaque site Web.
Les images indiquent un millier de mots et les exemples de balises sont comme des captures d'écran des moteurs de visualisation :) Alors, voici l'une de mes préférées moteur d'affichage Spark
<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>