5/8/2011 2:53
Lucas Ontivero
Por qué no me gustan las plantillas T4
A mi anterior entrada la titulé “Las plantillas T4 son basura” cosa que respondió más a mi estado de bronca contra éstas que a su verdadero valor como herramienta. Muchos me preguntaron sobre el por qué de tal calificación y la verdad es que ese por qué es demasiado largo de explicar pero voy a mostrar la punta del ovillo para que a quien le interese pueda descubrirlo por sí solo.
Veamos un par de ejemplo muy sencillos, el primero es crear un CVS partir de una array definido como sigue:

Lo que queremos obtener es lo siguiente:

|
T4
|
StringTemplate
|
 |
 |
Ambos dan por resultado exactamente la misma salida. Ahora, como no soy experto en ninguno de los dos, doy por seguro que existen mejores maneras de hacerlo tanto usando T4 como StringTemplate. Pero, si damos por válido el ejemplo, podemos ver claramente la diferencia en legibilidad y, aunque el ejemplo es muy pequeños, en mantenibilidad la diferencia también es evidente.
Pero veamos algo levemente más complejo, solo un poquito más complejo, generemos una tabla html para ver algunas diferencias. Aunque con StringTemplate lo haría así:
Voy a refactorizarla y compararla en la tabla de abajo.
|
T4
|
StringTemplate
|
 |
 |
Nuevamente aquí estoy seguro de que existen mejores maneras de hacerlo tanto con T4 como con StringTemplate pero bueno, que valga el ejemplo. así que veamos… (suspiro prolongado) por donde empezar….?. quizás deba aclarar que mientras que la plantilla de la derecha está completa, a la de la izquierda le quité varios renglones con directivas varias del tipo <@template> y <@output>.
Antes de comenzar pregunto: ¿soy yo, o en la plantilla del lado izquierdo hay mucho amarillito?
Bueno, ahora si, lo primero es que dado que en la plantilla de la izquierda tenemos código, este puede explotar con alguna exception. Por ejemplo, que sucede si data es NULL? Sí, tendremos una bonita exception y entonces quizás debamos depurar la plantilla. Sí, leíste bien: depurar una plantilla! por más ridículo que suene, es algo que probablemente debamos hacer. En cambio, con la plantilla de la derecha obtendremos simplemente una tabla html vacía, no muy útil pero válida al fin.
Otro punto es que cualquiera que haya usado T4 ha sufrido alguna vez la pérdida de alguna etiqueta de apertura o cierre y ha perdido la vista tratando de encontrar donde es que le falta abrir o cerrar un tag. Y es que en semejante sopa de tags cualquiera se pierde. Por eso es común ver comentarios en la plantilla al estilo: // cierra foreach ya que uno termina preguntándose ¿que es lo que está cerrando esta llave? Bueno, esa llave está cerrando un foreach!
En cuanto a la calidad de la salida solo puedo decir que con la plantilla de la derecha, sin ningún esfuerzo adicional, obtengo un html perfectamente tabulado mientras que con la de la derecha….uhmmm, bueno… requiere algún trabajito adicional que se resuelve agregando más código.
Tal vez algo que me agrada de StringTemplate es que nos mantiene protegidos de sus mecanismos internos, es decir, uno no está obligado, y de hecho no debería estarlo, a entender cómo es que funciona internamente. Pero T4 si nos obliga, solo basta ver los distintos tipos de bloques que existen para darse cuenta: ¿Standard feature block?, ¿Class feature block? Además deben ir en un orden específico o no compilan. Sí, esas son las tuberías saliéndose hacia afuera a las que me refiero, el creador debe estar consciente de a dónde va a ir a parar lo que pone en cada block según el tipo de bloque, debe entender o imaginar como es la clase que T4 genera por detrás. Por tal motivo, T4 es solo para programadores.
Corto acá pero antes debo aclarar que no basta solo con “ver” las diferencias sino con “entender” las diferencias, entender todo lo conceptual que hay por detrás de la elegancia de StringTemplate (o de la inelegancia de T4).
Archivado en: Arquitectura,Diseño,.Net,Languages,Desarrollo,Conceptos,C#,Herramientas,Productividad
Comparte este post: