2009-11-16 10 views
29

En Grails, hay dos mecanismos para la modularidad en las capas de vista: Plantilla y TagLib.Grails: Plantillas frente a TagLibs.

Mientras escribo mi propia aplicación Grails, a menudo me enfrento a la misma pregunta cuando necesito escribir un componente UI: ¿necesito usar una plantilla o un TagLib?

Después de buscar en la web, no he encontrado una gran cantidad de mejores prácticas o reglas generales relativas a esta decisión de diseño, por lo que yo puedo ayudar y decirme:

  1. Cuál es la principal diferencia entre los dos mecanismos?
  2. ¿En qué escenarios, usa un TagLib en lugar de una Plantilla (y viceversa)?

Respuesta

23

Definitivamente hay cierta superposición, pero a continuación hay varias cosas en que pensar. Una forma de pensarlo es que Template es como una reutilización a nivel de método, mientras que TagLibs es más conveniente para la reutilización a nivel de API.

  • plantillas son ideales para cuando tiene que formatear algo específico para su visualización. Por ejemplo, si desea mostrar un objeto de dominio de una manera específica, generalmente es más fácil hacerlo en una plantilla, ya que básicamente solo está escribiendo HTML con algunos. Es reutilizable, pero creo que su reutilización es un poco limitada. Es decir. si tiene una plantilla, la usaría en varias páginas, no en cientos de páginas.

  • Por otro lado, taglibs es una unidad más pequeña de funcionalidad, pero una que es más probable que utilice en muchos lugares. En él es probable que concatenar cadenas, por lo que si está buscando crear cientos de líneas de HTML, son menos convenientes. Una característica clave que los taglibs permiten es la capacidad de inyectar/interactuar con los servicios. Por ejemplo, si necesita un trozo de código que active un servicio de autenticación y muestre el usuario actual, solo puede hacerlo en un TagLib. No tiene que preocuparse por pasar nada al taglib en este caso; taglib lo buscará y lo resolverá desde el servicio. También es probable que lo use en muchas páginas, por lo que es más conveniente tener un taglib que no necesita parámetros.

  • También hay varios tipos de taglibs, incluso aquellas que permitan iterar sobre algo en el cuerpo , tener condicional, etc - que es en realidad no es posible con las plantillas. Como dije anteriormente, una biblioteca de taglib bien elaborada se puede utilizar para crear una API reutilizable que hace que su código GSP sea más legible. Dentro del mismo * taglib.Groovy puede tener múltiples definiciones de etiquetas, así que esa es otra diferencia: puede agruparlas todas en un solo lugar y llamar de un taglib a otro.

Además, tenga en cuenta que se puede llamar una plantilla desde el interior de una taglib, o puede llamar taglibs plantillas withing, para que pueda mezclar y combinar según sea necesario.

Espero que esto lo aclare un poco, aunque realmente mucho de esto es lo que construir es más conveniente para codificar y con qué frecuencia será reutilizado.

+1

¡¡Genial !! ¡Exactamente el tipo de respuestas que esperaba! Ha expresado palabras y apenas ha formalizado lo que solo sentía por intuición. Gracias. – fabien7474

+1

"iterar sobre algo en el cuerpo, tener condiciones, etc., eso no es posible en realidad con las plantillas" - ¿eh, lo siento? Puede escribir código de Groovy arbitrario en la plantilla. Y la plantilla puede iterar sobre la matriz y hacer condicionales incluso sin el código de Groovy. Sin embargo, es mejor hacerlo como mínimo. –

+0

Victor: Quise decir que dentro del cuerpo de taglib puede ejecutar código adicional, que no tiene nada que ver con su taglib, no es que no pueda ejecutar código en las plantillas. Probablemente debería haber calificado más. –

2

En cuanto a nosotros ...

se supone que un codificador para ver la lógica específica de presentación del objeto en la plantilla, y no en cualquier otro lugar.

Utilizamos taglibs solo para elementos de página aislados, no relacionados con la lógica de negocios en absoluto. En realidad, tratamos de minimizar su uso: es muy fácil escribir lógica de negocios en un taglib.

Las plantillas son la forma convencional de hacerlo; por ejemplo, admiten diseños (por cierto, se les puede llamar un tercer mecanismo)

+0

Buen punto sobre el peligro de escribir lógica de negocios en un taglib. Es similar a un controlador en ese sentido. En caso de duda, colóquelo en un servicio y luego llame al servicio. (desde un taglib _or_ un controlador _o_ ambos!) – cdeszaq

Cuestiones relacionadas