Un caso de Uso de AjGenesis

En el grupo Google de Code Generation:

http://groups.google.com/group/codegeneration

encuentro este mensaje de Fernando Claverino

Usos de AjGenesis

Gracias a Fernando, por compartir su experiencia. Es importante, para AjGenesis, que los que lo usen compartan y comenten su experiencia, para poder ir viendo los usos, facilidades y problemas que tenemos con la herramienta. Comento acá gran parte del mensaje. Fernando usa AjGenesis para generar reportes, usando SQL Server por lo que entendí. En proyecto Medusa, estamos también generando reportes usando Reporting Services. Fernando escribe:

Modelo:

No definimos un archivo models.xml que apunta a cada item del modelo.
Tenemos una carpeta models y hay una task que la recorre
recursivamente y levanta todos los archivos del modelo (*.mod.xml).
Cuando se hace esto, seteamos dinámicamente a cada objeto cargado una
propiedad con el path relativo, que luego usamos en otras tasks. Los
artefactos se generan en la misma estructura de carpeta, pero dentro
de la carpeta build.

Este es un ejemplo de modelo obtenido de otra forma. Podemos partir de uno o varios modelos, obtenerlos de archivos o de otra fuente de información (como una base de datos).

Plugins:

Aca estamos haciendo algo de trampa. Si bien todos los artefactos
generados deberían construirse a partir del modelo, hay algunas cosas
que son dificiles de modelar. En nuestro caso generamos las consultas
MDX. Es muy difícil definir un modelo que soporte la riqueza de este
lenguaje. Asi que lo que hicimos fue definir en el archivo de
tecnología cual es el plugin a utilizar. El plugin es un template (que
genera la consulta MDX a partir del modelo). Vi en los ejemplos que en
la tecnología se suele definir el dialecto (esto sería algo parecido,
me parece).

Esta técnica que nosotros llamamos plugin, la usamos siempre que
queremos generar un caso particular no cubierto por los templates que
ya tenemos. En el archivo de tecnología podemos definir el onrows,
oncols y where de la consulta, pero en muchos casos esto varía en
función del modelo. Es como favorerer convención sobre configuración.
Si no configuro nada, uso el template que corresponde. Si defino un
plugin, uso ese.

Interesante. El usar un template dinámicamente, indicándo cuál usar en el propio modelo, en vez de en código duro de tares, es una capacidad que AjGenesis tiene desde el principio. Recuerdo los tiempos de ASP clásico (los noventa), donde se podía incluir otro archivo por nombre en el proceso de un archivo/página, pero el nombre debía ser especificado como constante, no podía ser especificado en ejecución. PHP influyó bastante en el diseño de AjBasic, y se permiten cosas como:

 


include "Tasks/Build${Technology.Programming.Dialect}.ajg"





Donde el archivo a incluir y procesar como tarea es determinado en ejecución a partir del estado del modelo (o de lo que sea).



Nivel de abstracción:

Aprovechamos la libertad del modelo para trabajar en un nivel más
abstracto. Es decir, en lugar de definir un reporte, definimos una
sección (grupo de reportes) y las posibles navegaciones. La
combinación de estas definen los reportes. Es decir, a partir del
modelo definido, una task lo combina y genera un nuevo modelo a partir
del cual se aplican los templates.



Exacto. Podemos elevar el nivel de abstracción en cualquier momento, si no lleva demasiado costo. Es la idea de AjGenesis: podemos modelar entidades, o mensajes, o lo que descubramos en nuestro dominio que es interesante modelar. Y al descubrir eso a modelar, vamos elevando el nivel de abstracción.



Fernando concluye que no encontraron, en su tiempo, otra herramienta que le diera tanta libertad en la definición de los modelos. Ciertamente, esa libertad es parte del diseño inicial de la herramienta.



Si Ud. tiene algun caso de uso de AjGenesis, podrá publicar su experiencia?



Nos leemos!



Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

This entry was posted in 2643, 6145. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>