Comparaison ASP.NET MVC View Engine

J’ai cherché sur SO & Google une ventilation des différents moteurs de vue 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 vue.

Je ne cherche pas nécessairement les «meilleures» ou les «plus rapides», mais plutôt des comparaisons réelles des avantages / inconvénients des principaux acteurs (par exemple, WebFormViewEngine par défaut, MvcConsortingb View Engines, etc.) pour diverses situations. Je pense que cela serait vraiment utile pour déterminer si le passage 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?

Moteurs ASP.NET MVC View (Wiki de la communauté)

Comme une liste complète ne semble pas exister, commençons par celle-ci sur SO. Cela peut être très utile pour la communauté ASP.NET MVC si les utilisateurs ajoutent leur expérience (en particulier ceux qui ont consortingbué à l’un d’entre eux). Tout ce qui implémente IViewEngine (par exemple VirtualPathProviderViewEngine ) est un jeu équitable ici. Il suffit de classer par ordre alphabétique les nouveaux moteurs de vue (en laissant WebFormViewEngine et Razor en haut) et d’essayer d’être objective 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:

  • omniprésent depuis qu’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 consortingbuer à anti-modèle de “tag soupe”
  • la syntaxe de bloc 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>" %> <% if(model.Any()) { %> 
    <% foreach(var p in model){%>
  • <%=p.Name%>
  • <%}%>
<%}else{%>

No products available

<%}%>

System.Web.Razor

Objectifs de conception:

Avantages:

  • Compact, Expressif et Fluide
  • Facile à apprendre
  • N’est pas une nouvelle langue
  • A une grande intelligence
  • Unité Testable
  • Ubiquitous, livré avec ASP.NET MVC

Les inconvénients:

  • Crée un problème légèrement différent de “tag soupe” référencé ci-dessus. Lorsque les balises serveur fournissent une structure autour du code serveur et non-serveur, Razor confond le code HTML et le code serveur, ce qui rend difficile le développement HTML ou JS (voir Exemple Con # 1). tags sous certaines conditions très communes.
  • Encapsulation médiocre + possibilité de réutilisation: il n’est pas pratique d’appeler un modèle de razor comme s’il s’agissait d’une méthode normale. En pratique, le razor 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 difficile. Malgré cela, le modèle de données de Razor est essentiellement une simple concaténation de chaînes, de sorte que les erreurs de syntaxe et d’imbrication ne sont ni détectées statiquement ni dynamicment, bien que l’aide au moment de la conception de VS.NET en atténue quelque peu. La maintenabilité et la refactorabilité peuvent en souffrir.
  • Aucune API documentée , http://msdn.microsoft.com/en-us/library/system.web.razor.aspx

Exemple de Con # 1 (notez l’emplacement de “ssortingng [] …”):

 @{ 

Team Members

ssortingng[] teamMembers = {"Matt", "Joanne", "Robert"}; foreach (var person in teamMembers) {

@person

} }

Bellevue

Objectifs de conception:

  • Respecter le HTML en tant que langage de premier ordre, plutôt que de le traiter comme du “simple texte”.
  • Ne plaisante pas avec mon HTML! Le code de liaison de données (code Bellevue) doit être distinct du code HTML.
  • Appliquez une séparation ssortingcte des vues de modèle

Brail

Objectifs de conception:

Le moteur de visualisation 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:

  • modélisé d’après “la syntaxe Python conviviale au poignet”
  • Vues compilées à la demande (mais sans précompilation disponibles)

Les inconvénients:

  • conçu pour être écrit dans la langue Boo

Exemple:

   ${title}   

The following items are in the list:

    <%for element in list: output "
  • ${element}
  • "%>

I hope that you would like Brail


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 à la compilation du code XML valide
  • Coloration de la syntaxe
  • IntelliSense complet
  • Vues compilées
  • Extensibilité à l’aide de classes CLR, de fonctions, etc.
  • Compatibilité et manipulation transparentes depuis son code VB.NET habituel
  • Unité testable

Les inconvénients:

  • Performance: construit l’ensemble du DOM avant de l’envoyer au client.

Exemple:

 Protected Overrides Function Body() As XElement Return _  

Hello, World

End Function

NDjango

Objectifs de conception:

NDjango est une implémentation du langage de modèles Django sur la plate-forme .NET, utilisant le langage F # .

Avantages:

  • La version 0.9.1.0 de NDjango semble être plus stable sous stress que WebFormViewEngine
  • Editeur de modèles Django avec colorisation de la syntaxe, complétion du code et diagnostics de type “as-you-type” (VS2010 uniquement)
  • Intégré aux frameworks ASP.NET, Castle MonoRail et Bistro MVC

NHaml

Objectifs de conception:

.NET port du moteur de vue Rails Haml. Du site web de Haml :

Haml est un langage de balisage utilisé pour décrire clairement 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 dynamic.

Avantages:

  • structure laconique (c’est-à-dire sèche)
  • bien en retrait
  • 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 - if(model.Any()) %ul - foreach (var p in model) %li= p.Name - else %p No products available 

NVelocityViewEngine (MvcConsortingb)

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 concis

Les inconvénients:

  • nombre limité de méthodes d’assistance disponibles sur la vue
  • L’intégration de Visual Studio n’est pas automatique (IntelliSense, vérification des vues à la compilation ou refactoring)

Exemple:

 #foreach ($p in $viewdata.Model) #beforeall 
    #each
  • $p.Name
  • #afterall
#nodata

No products available

#end

SharpTiles

Objectifs de conception:

SharpTiles est un port partiel de JSTL combiné avec le concept derrière le framework Tiles (comme de Mile Stone 1).

Avantages:

  • familier aux développeurs Java
  • Blocs de code XML

Les inconvénients:

Exemple:

  


Spark View Engine

Objectifs de conception:

L’idée est de permettre au HTML de dominer le stream et le 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 fonctionnalité de liaison pour se débarrasser de tout 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 de modèle et le balisage littéral (cela peut être atténué par les préfixes d’espace de noms)

Exemple:

  
  • ${p.Name}

No products available


SsortingngTemplate 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 stream de sortie de réponse.
  • Caché 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.
  • Flexible. Les modèles peuvent être nesteds à 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 Java de SsortingngTemplate

Les inconvénients:

  • une syntaxe de modèle simpliste peut interférer avec la sortie prévue (par exemple, un conflit jQuery )

Battements d’ailes

Wing Beats est un DSL interne pour la création de XHTML. Il est basé sur F # et inclut un moteur de visualisation ASP.NET MVC, mais peut également être utilisé uniquement pour sa capacité à créer XHTML.

Avantages:

  • Vérification à la compilation du code XML valide
  • Coloration de la syntaxe
  • IntelliSense complet
  • Vues compilées
  • Extensibilité à l’aide de classes CLR, de fonctions, etc.
  • Compatibilité et manipulation transparentes depuis son code F # régulier
  • Unité testable

Les inconvénients:

  • Vous n’écrivez pas vraiment de code HTML, mais du code qui représente du code HTML dans un DSL.

XsltViewEngine (MvcConsortingb)

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é par le temps
  • Les erreurs de syntaxe et d’imbrication d’éléments peuvent être détectées de manière statique.

Les inconvénients:

  • le style de langage fonctionnel rend le contrôle de stream difficile
  • XSLT 2.0 n’est (probablement?) Pas pris en charge. (XSLT 1.0 est beaucoup moins pratique).

Mon choix actuel est Razor. Il est très propre et facile à lire et maintient les pages de vues très faciles à gérer. Il y a aussi un support intellisense qui est vraiment génial. ALos, lorsqu’il est utilisé avec des assistants Web, il est également très puissant.

Pour fournir un échantillon simple:

 @Model namespace.model    Test Razor   
    @foreach(var x in ViewData.model) {
  • @x.PropertyName
  • }

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? Eh bien jusqu’à présent (je suis nouveau à cela) lorsque vous utilisez certains des helpers pour les formulaires, il y a un manque de support pour l’ajout d’une référence de classe CSS, 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 vue ont des objectives différents. Le moteur de visualisation Spark , par exemple, vise à débarrasser vos vues de la “soupe aux balises” en essayant de rendre tout ce qui est fluide et lisible.

Votre meilleur pari serait de regarder quelques implémentations. Si cela semble intéressant pour l’intention de votre solution, essayez-le. Vous pouvez mélanger et faire correspondre les moteurs de vue dans MVC, donc cela ne devrait pas être un problème si vous décidez de ne pas utiliser un moteur spécifique.

Vérifiez ce SharpDOM . Ceci est ac dsl 4.0 interne pour la génération de HTML et aussi asp.net mvc view engine.

J’aime ndjango . Il est très facile à utiliser et très flexible. Vous pouvez facilement étendre la fonctionnalité d’affichage avec des balises et des filtres personnalisés. Je pense que “grandement lié à F #” est plutôt avantageux que désavantagé.

Je pense que cette liste devrait également inclure des exemples de chaque moteur de vue afin que les utilisateurs puissent en avoir un aperçu sans avoir à visiter chaque site Web.

Les images disent mille mots et les échantillons de balisage sont comme des captures d’écran pour les moteurs de vues 🙂 Alors, voici un exemple de mon moteur de visualisation Spark préféré .

  
  • ${p.Name}

No products available