27 votes

Grails : Templates vs TagLibs.

Dans Grails, il existe deux mécanismes de modularité dans les couches de vues : Modèle y TagLib .

Alors que j'écris ma propre application Grails, je suis souvent confronté à la même question lorsque je dois écrire un composant d'interface utilisateur : Dois-je utiliser un modèle ou une TagLib ?

Après avoir cherché sur le web, je n'ai pas trouvé beaucoup de meilleures pratiques ou des règles empiriques concernant cette décision de conception, alors pouvez-vous m'aider et me le dire :

  1. Quelle est la principale différence entre les deux mécanismes ?
  2. Dans quels scénarios, utilisez-vous une TagLib au lieu d'un Template (et vice-versa) ?

21voto

Jean Barmash Points 3780

Il y a certainement des chevauchements, mais vous trouverez ci-dessous plusieurs éléments à prendre en compte. Une façon d'y penser est que Template est comme une réutilisation au niveau de la méthode, tandis que les TagLibs sont plus pratiques pour la réutilisation au niveau de l'API.

  • Modèles sont parfaits lorsque vous devez formater quelque chose de spécifique pour l'affichage. Par exemple, si vous voulez afficher un objet de domaine d'une manière spécifique, il est généralement plus facile de le faire dans un modèle, puisque vous vous contentez d'écrire du HTML avec quelques . C'est réutilisable, mais je pense que cette réutilisation est un peu limitée. Par exemple, si vous avez un modèle, vous l'utiliserez dans plusieurs pages, pas dans des centaines de pages.

  • D'un autre côté, taglibs est une unité de fonctionnalité plus petite, mais que vous êtes plus susceptible d'utiliser dans de nombreux endroits. Vous êtes susceptible d'y concaténer des chaînes de caractères, donc si vous cherchez à créer une centaine de lignes de HTML, ils sont moins pratiques. Une caractéristique clé des taglibs est la possibilité d'injecter/interagir avec des services. Par exemple, si vous avez besoin d'un morceau de code qui appelle un service d'authentification et affiche l'utilisateur actuel, vous ne pouvez le faire que dans une TagLib. Dans ce cas, vous n'avez pas à vous soucier de transmettre quoi que ce soit à la Taglib - celle-ci se chargera de le découvrir auprès du service. Vous êtes également susceptible d'utiliser cette fonction dans de nombreuses pages, il est donc plus pratique d'avoir une taglib qui n'a pas besoin de paramètres.

  • Il existe également plusieurs types de taglibs, y compris ceux qui permettent d'itérer sur quelque chose dans le corps, d'avoir du conditionnel, etc. ce qui n'est pas vraiment possible avec les modèles. Comme je l'ai dit plus haut, une bibliothèque de taglib bien conçue peut être utilisée pour créer une API réutilisable qui rend le code de votre SGP plus lisible. A l'intérieur d'un même *taglib.groovy, vous pouvez avoir plusieurs définitions de tags, c'est donc une autre différence - vous pouvez les regrouper en un seul endroit, et appeler d'un taglib à un autre.

N'oubliez pas non plus que vous pouvez appeler un modèle à partir d'un taglib, ou que vous pouvez appeler des taglibs à partir de modèles, ce qui vous permet de combiner les deux selon vos besoins.

J'espère que cela vous a éclairci un peu les choses, bien que tout dépende en grande partie de la construction la plus pratique à coder et de la fréquence à laquelle elle sera réutilisée.

2voto

Victor Sergienko Points 6199

Quant à nous...

Un codeur est censé voir la logique de présentation d'un objet spécifique dans le modèle, pas ailleurs.

Nous n'utilisons les taglibs que pour des éléments de page isolés, qui ne sont pas du tout liés à la logique métier. En fait, nous essayons de minimiser leur utilisation : il est trop facile d'écrire une logique métier dans une taglib.

Les modèles sont le moyen conventionnel de procéder ; par exemple, ils prennent en charge les mises en page (entre-temps, ils peuvent être nommés un troisième mécanisme).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X