web-dev-qa-db-fra.com

La syntaxe Razor offre-t-elle un avantage convaincant dans le balisage de l'interface utilisateur?

Je remarque que Scott Guthrie commence à mentionner Razor a passablement sur son blog mais je ne suis pas sûr que ce soit un bon choix pour mon style.

Certes, c'est un style assez peu familier pour quelqu'un qui est assez habitué à un type de balisage ASP.Net "standard" (espaces réservés au contenu et code en ligne), mais cela ressemble à beaucoup de pages supplémentaires à gérer et à un balisage moins clair pour moi.

Quels sont les sentiments des autres à ce sujet? Est-ce quelque chose qui, selon vous, devrait être sérieusement pris en compte lors de l'échafaudage de nouvelles pages MVC ou essaie-t-il simplement de résoudre un problème qui n'existe pas?

88
Phil.Wheeler

[Avertissement: je suis l'un des développeurs Microsoft sur MVC et Razor, donc je pourrais être un peu biaisé :)]

Nous avons conçu Razor pour être un langage de modélisation concis qui n'utilise que la quantité minimale nécessaire de caractères de contrôle. Je dirais que de grandes parties de vos vues peuvent être exprimées avec moins de caractères que le même code en utilisant la syntaxe WebForms "traditionnelle".

Par exemple, l'extrait de code suivant dans la syntaxe ASPX:

<% if(someCondition) { %>
  <ol>
  <% foreach(var item in Model) { %>
     <li><%: item.ToString() %></li>
  <% } %>
  </ol>
<% } %>

Peut être exprimé comme suit dans Razor:

@if(someCondition) {
   <ol>
   @foreach(var item in Model) {
      <li>@item.ToString()</li>
   }
   </ol>
}

Alors que la version ASPX comporte 21 caractères de transition (le <% et %>), la version Razor n'en a que trois (@)

Je dirais que les avantages de Razor sont les suivants:

  1. Syntaxe concise, qui est très similaire à la façon dont vous écrivez du code C # normal (consultez le récent article de blog suivant de Phil Haack comparant Asxp avec la syntaxe Razor: http://haacked.com/archive/2011/01/ 06/razor-syntax-quick-reference.aspx )
  2. Encodage HTML automatique de la sortie (ce qui vous protège des attaques par injection html)
  3. Validation intégrée (mais pas à 100%) de votre balisage qui vous aide à éviter les balises déséquilibrées

Les concepts liés aux pages sont également mappés facilement à partir de ce que vous avez dans ASPX

  • Comme vous pouvez le voir, le code en ligne est toujours autorisé
  • Les sections (qui peuvent être facultatives) sont équivalentes aux espaces réservés de contenu
  • Pages de mise en page au lieu de pages maîtres
  • Les concepts de vues complètes et partielles sont les mêmes
  • @functions { ... } bloque au lieu de <script runat="server"> ... </script>

De plus, Razor a un certain nombre de concepts utiles qui, je dirais, sont meilleurs que ceux disponibles dans ASPX:

  • @helper fonctions pour créer très facilement des fonctions qui émettent du balisage
  • @model mot clé pour spécifier le type de modèle de votre vue sans avoir à écrire un <%@ Page ... directive avec le nom complet de la classe

Je voudrais penser que nous avons abordé un vrai problème, qui est de vous permettre d'écrire plus facilement des vues concises et conformes aux normes tout en vous fournissant des moyens de refactoriser le code commun.

Bien sûr, tout le monde ne préférera pas la syntaxe, c'est pourquoi nous prenons également entièrement en charge le moteur de vue ASPX. En outre, vous pouvez consulter Spark et NHaml, qui sont deux moteurs de visualisation tiers bénéficiant d'un suivi important de la communauté. Le billet de blog suivant présente une bonne comparaison des différentes offres: http://blogs.msdn.com/b/coding4fun/archive/2010/10/04/10070953.aspx

153
marcind

Personnellement, j'apprécie vraiment la réduction du nombre de caractères d'échappement utilisés. En utilisant <% %> devient très fastidieux par rapport à @{} et n'est pas aussi attrayant du point de vue syntaxique.

De plus, l'écriture d'une définition complète pour le codebehind et la page est simplifiée en un seul @model model.

Comme l'a également noté marcind, ne pas avoir à toujours inclure runat=server est très sympa aussi.

Dans l'ensemble, j'apprécie vraiment d'utiliser le moteur Razor et je trouve que non seulement il me facilite les choses à développer, mais rend également le code plus facile à lire.

3
Travis J

Vous pouvez essayer ce convertisseur . Pour plus d'informations, consultez cet article de blog .

2
George K