Moteurs de vue ASP.NET MVC (Wiki de communauté)
Puisqu'une liste complète ne semble pas exister, commençons-en une ici sur SO. Cela peut être d'une grande valeur pour la communauté ASP.NET MVC si les gens ajoutent leur expérience (en particulier ceux qui ont contribué à l'un d'entre eux). Tout ce qui est mis en œuvre IViewEngine
(par exemple VirtualPathProviderViewEngine
) est un jeu équitable 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:
Moteur de vue utilisé pour restituer une page Web Forms à la réponse.
Avantages:
- omniprésent car il est livré avec ASP.NET MVC
- expérience familière pour les développeurs ASP.NET
- IntelliSense
- peut choisir n'importe quelle langue avec un fournisseur CodeDom (par exemple C #, VB.NET, F #, Boo, Nemerle)
- compilation à la demande ou vues précompilées
Les inconvénients:
- l'utilisation est confondue par l'existence de modèles "ASP.NET classiques" qui ne s'appliquent plus dans MVC (par exemple ViewState PostBack)
- peut contribuer à l'anti-modèle de "soupe de tag"
- la syntaxe des blocs de code et le typage fort peuvent gêner
- IntelliSense applique le style pas toujours approprié pour les blocs de code en ligne
- peut être bruyant lors de la conception de modèles simples
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>
<%}%>
System.Web.Razor
Objectifs de conception:
Avantages:
- Compact, expressif et fluide
- Facile à apprendre
- N'est pas une nouvelle langue
- Possède une grande intelligence
- Testable à l'unité
- Ubiquitaire, livré avec ASP.NET MVC
Les inconvénients:
- Crée un problème légèrement différent de la "soupe de tag" référencée ci-dessus. Lorsque les balises serveur fournissent réellement une structure autour du code serveur et non serveur, Razor confond le code HTML et le code serveur, ce qui rend le développement HTML ou JS pur difficile (voir l'exemple de con # 1) car vous finissez par avoir à "échapper" HTML et / ou JavaScript balises dans certaines conditions très courantes.
- Mauvaise encapsulation + réutilisabilité: il n'est pas pratique d'appeler un modèle de rasoir comme s'il s'agissait d'une méthode normale - en pratique, le rasoir peut appeler du code mais pas l'inverse, ce qui peut encourager le mélange de code et de présentation.
- La syntaxe est très orientée html; générer du contenu non html peut être délicat. Malgré cela, le modèle de données de rasoir est essentiellement une concaténation de chaînes, de sorte que les erreurs de syntaxe et d'imbrication ne sont ni statiquement ni dynamiquement détectées, bien que l'aide à la conception de VS.NET atténue quelque peu cela. La maintenabilité et la refactorabilité peuvent en souffrir.
Aucune API documentée , http://msdn.microsoft.com/en-us/library/system.web.razor.aspx
Exemple n ° 1 (notez le placement de "string [] ..."):
@{
<h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
foreach (var person in teamMembers)
{
<p>@person</p>
}
}
Bellevue
Objectifs de conception:
- Respectez le HTML comme 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 distinct du HTML.
- Appliquer une séparation stricte de la vue modèle
Brail
Objectifs de conception:
Le moteur de vue Brail a été porté depuis MonoRail pour fonctionner avec Microsoft ASP.NET MVC Framework. Pour une introduction à Brail, consultez la documentation sur le site Web du projet Castle .
Avantages:
- calqué sur la "syntaxe python conviviale"
- Vues compilées à la demande (mais pas de précompilation disponible)
Les inconvénients:
- conçu pour être écrit dans la langue Boo
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
Hasic utilise les littéraux XML de VB.NET au lieu de chaînes comme la plupart des autres moteurs de vue.
Avantages:
- Vérification au moment de la compilation du XML valide
- Coloration syntaxique
- Intellisense complet
- Vues compilées
- Extensibilité à l'aide de classes, fonctions, etc. CLR régulières
- Composabilité et manipulation sans faille puisque c'est du code VB.NET normal
- Testable à l'unité
Les inconvénients:
- Performance: construit le DOM entier avant de l'envoyer au client.
Exemple:
Protected Overrides Function Body() As XElement
Return _
<body>
<h1>Hello, World</h1>
</body>
End Function
NDjango
Objectifs de conception:
NDjango est une implémentation du
Django Template Language sur la plate-forme .NET, utilisant le langage F # .
Avantages:
NHaml
Objectifs de conception:
Port .NET du moteur de visualisation Haml de Rails. Du site Haml :
Haml est un langage de balisage qui est utilisé pour décrire proprement et simplement le XHTML de tout document Web, sans utiliser de code en ligne ... Haml évite d'avoir à 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:
- structure laconique (c.-à-d. SEC)
- bien échancré
- structure claire
- C # Intellisense (pour VS2008 sans ReSharper)
Les inconvénients:
- une abstraction de XHTML plutôt que de tirer parti de la familiarité du balisage
- Pas d'Intellisense pour VS2010
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 populaire projet Java
Velocity .
Avantages:
- facile à lire / écrire
- code de vue concise
Les inconvénients:
- nombre limité de méthodes d'assistance disponibles sur la vue
- n'a pas automatiquement l'intégration de Visual Studio (IntelliSense, vérification des vues à la compilation ou refactoring)
Exemple:
#foreach ($p in $viewdata.Model)
#beforeall
<ul>
#each
<li>$p.Name</li>
#afterall
</ul>
#nodata
<p>No products available</p>
#end
SharpTiles
Objectifs de conception:
SharpTiles est un port partiel de JSTL
combiné avec le concept derrière le framework Tiles (à partir de Mile stone 1).
Avantages:
- familier aux développeurs Java
- Blocs de code de style XML
Les inconvénients:
Exemple:
<c:if test="${not fn:empty(Page.Tiles)}">
<p class="note">
<fmt:message key="page.tilesSupport"/>
</p>
</c:if>
Spark View Engine
Objectifs de conception:
L'idée est de permettre au html de dominer le flux et au code de s'adapter parfaitement.
Avantages:
- Produit des modèles plus lisibles
- C # Intellisense (pour VS2008 sans ReSharper)
- Plug-in SparkSense pour VS2010 (fonctionne avec ReSharper)
- Fournit une puissante fonction de liaisons pour se débarrasser de tout le code dans vos vues et vous permet d'inventer facilement vos propres balises HTML
Les inconvénients:
- Pas de séparation claire entre la logique du modèle et le balisage littéral (cela peut être atténué par les préfixes d'espace de noms)
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>
StringTemplate View Engine MVC
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 un FileSystemWatcher pour détecter les modifications de fichiers.
- 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 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:
- familier aux développeurs StringTemplate Java
Les inconvénients:
- la syntaxe de modèle simpliste peut interférer avec la sortie souhaitée (par exemple, conflit jQuery )
Battements d'ailes
Wing Beats est un DSL interne pour créer du 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:
- Vérification au moment de la compilation du XML valide
- Coloration syntaxique
- Intellisense complet
- Vues compilées
- Extensibilité à l'aide de classes, fonctions, etc. CLR régulières
- Composabilité et manipulation sans faille puisque c'est du code F # normal
- Testable à l'unité
Les inconvénients:
- Vous n'écrivez pas vraiment du HTML mais du code qui représente du HTML dans une DSL.
XsltViewEngine (MvcContrib)
Objectifs de conception:
Construit des vues à partir de XSLT familier
Avantages:
- largement omniprésent
- langage de modèle familier pour les développeurs XML
- Basé sur XML
- éprouvé dans le temps
- Les erreurs d'imbrication de syntaxe et d'élément peuvent être détectées statiquement.
Les inconvénients:
- le style de langage fonctionnel rend le contrôle des flux difficile
- XSLT 2.0 n'est (probablement?) Pas pris en charge. (XSLT 1.0 est beaucoup moins pratique).