domingo, mayo 06, 2007

Administración de Templates - Un enfoque simple - Semana 18

La nueva versión del código incluirá un mecanismo simple de administración de templates, tanto para el preview de las pantallas como para el resultado (nota: la fecha estimada de liberación de esta funcionalidad es el 10 de Mayo, he podido avanzar muy poco en estos días).

Eso hace que el problema se resuma en algo simple, la administración de la forma desde herramientas como FrontPage o como Nvu, y mantiene el código razonablemente simple, de hecho lo hace bastante paramétrico.

¿Por qué digo esto?

Bueno, en el template dice @IMG:1@ o @TIT:1@ para indicar diferentes parámetros que se van procesando, pero también está @IMGCOUNT:3@, que me indica que el código resultante es algo como:

        Dim iMax As Long
Dim Count As Long

iMax = template.GetToken(MAX_COUNT)
For iCount = 1 To iMax
template.ReplaceToken(IMG, iCount, img(iCount).ImageURL)
template.ReplaceToken(TITLE, iCount, img(iCount).Title)
Next

MsgBox(template.GetHTML())

El código es "tonto", guiado por datos, fácil de probar con 3 datos e independiente que en realidad existan 200 ó 3.000 datos (obviamente que el algoritmo es O(n) por lo tanto si son 3000 datos se va a demorar más que si son 3, pero eso es predecible a priori, y no resulta una sorpresa).


Sin IF's molestos que aumenten la complejidad del código ni casos de prueba adicionales a considerar.


La administración de los templates está en una clase aparte, principalmente por que es un tema agnóstico respecto al resto del proyecto, perfectamente reutilizable, de hecho, aquí se utiliza para dos templeates independientes.


Así, la parametrización de la clase resulta del siguiente tipo:

        With template
.LoadHTML(TEMPLATE_FILE)
.Define("IMGCOUNT", MAX_COUNT, MODE.INPUT)
.Define("IMG", IMG, MODE.OUTPUT)
.Define("TITLE", TITLE, MODE.OUTPUT)
.FieldPrefix = "@"
.FieldSufix = "@"
.FieldDataSep = ":"
End With

Como puede verse, es posible parametrizar el template en forma precisa, minimizando el código en duro de este.


De hecho, pretendo armar una aplicación pequeña que utilice esta clase para reemplazar dinámicamente las llaves de Flickr (que por razones obvias no publiqué) y también para sacarlas del código una vez que se debe publicar el sitio (sé que sería más simple hacer un simple archivo, pero este tipo de sustitución tiene aplicaciones prácticas en algunas cosas que hoy hacemos en la oficina, por lo tanto, mato dos pájaros de un tiro).


El código sería más o menos el siguiente:

        With template
.LoadHTML(SRCFILENAME)
.Define("APIKEY", APIKEY, MODE.OUTPUT)
.FieldPrefix = "<<"
.FieldSufix = ">>"
.FieldDataSep = ":"

.ReplaceToken(APIKEY, 1, APIKEY_VALUE)
.SaveAs(OUTPUTFILENAME)
End With

No hay comentarios.: