AjGenesis y Generación de Código: viendo la luz

Ya tenía pendiente este post, desde hace unos meses. El bueno de @ferclaverino comentó su experiencia sobre generación de código en general, y con AjGenesis en particular, en su post:

Generación de Código, seguimos sin ver la luz?

(visiten el blog de @ferclaverino, recomiendo su material sobre Scrum y desarrollo ágil). Le agradezco desde acá, de forma especial, porque no es común encontrar un post sobre el uso de AjGenesis. Leo ahí:

En el pasado agile open de programación, junto con @claudiomeschini, @mariodallago y otra persona más que no recuerdo quien era, participamos de una sesión que los muchachos llamaron "Generación de código, seguimos sin ver la luz?" … El material del encuentro lo pueden encontrar acá: http://www.agiles.org/agile-open-tour/ba-2010-coding/resultados

Bien ahí! No sabía que el tema interesó en una conferencia ágil. Eso es bueno: discutir los pros y contras de este camino.

Pero notable encontrar también experiencia de alguien usando AjGenesis:

Yo comenté sobre una experiencia de hace unos años usando AjGénesis en un proyecto real y la de hace unas semanas, donde a partir de un modelo muy simple, generamos una solución web mvc con las características que venimos usando últimamente (service layer, domain model, repository, log4net, structure map, manejo de errores c/páginas amigables, etc). También generamos los scripts de nAnt p/integración continua con cruise control y deploy automatico al ambiente de QA.

Qué bueno! Sigo leyendo (yo comentaría todo el post, vayan y lean el post completo, destaco acá algunos fragmentos):

Una distinción importante para hacer en el modelo es separar el modelo de la tecnología o aspectos de implementación (como podrían ser paths, lenguage de programación, etc).

Exactamente. Algo que promuevo desde el comienzo del diseño de AjGenesis.

Algo interesante de AjGénesis es que el modelo se puede cargar de cualquier lado. Por ejemplo se podría cargar una parte del modelo a partir de las clases de una dll. Y luego completar ese modelo con más información, cómo por ejemplo que campos son requeridos p/armar un ABM.

Bien de nuevo! Tomar el modelo de donde sea, y completarlo. Más puntos incorporados en AjGenesis desde su “inception”.

Otra cosa que puede servir a la hora de diseñar un modelo es la de favorecer convención sobre configuración, para que sea menor la cantidad de cosas a definir en el mismo. Por ejemplo, podría asumir que todos los campos de mis entidades son requeridos y especificar puntualmente cuales no.

Siempre uno puede decidir. Y más en AjGenesis, si vieron los templates y tasks de ejemplo. ¿Qué pasa con el mantenimiento de los templates y de lo generado? Hay que separar bien lo manual, de lo generado automáticamente, de lo generado por única vez y luego seguimos manual. Fernando escribe:

Una manera de lidiar con esto vimos que es importante crear buenas abstracciones que separen la parte del problema que puede ser resuelta con generación de código, de la que no. De esa forma, hacer un cambio se traduce a modificar el modelo y volver a generar el código.

Eso es un gran subproducto de la actividad de diseño con generación de código desde un modelo: separar los problemas de la solución, lo importante de las “technicalities”. Hasta donde ví, muchas de los detalles pueden generarse automáticamente. Por ejemplo, en un proyecto real, cambiamos la solución de persistencia, y prácticamente todo el resto sobrevivió. Regeneramos los DAOs para que usaran el nuevo “approach”. También cambiamos las validaciones de las entidades.

Y más:

Conversamos también sobre algunos criterios para evaluar una herramienta de generación de código:

  • El código generado debería ser el mismo que escribiría a mano sin usar la herramienta.
  • Una prueba ácida sería que a partir del mismo modelo, debería ser posible generar código para otra tecnología.
  • El modelo a definir debe ser libre.
  • Posibilidad de cargar este modelo de cualquier lado: xml, excel, txt, dll, tablas, etc.

Notable! Hay alguien más que mi tía Carlota leyendo lo que escribo  …. ;-) ;-)

Es interesante encontrar este tipo de post y discusión. Siempre recomiendo que tomen alguna vez el camino de generación de código, con o sin AjGenesis (aunque si van por otra herramienta, dudo que consigan los puntos mencionados arriba). Vean si les sirve o no.

Nos leemos!

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

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

2 Responses to AjGenesis y Generación de Código: viendo la luz

  1. Yo creo que varios más que Carlota leemos… :)

    Cada vez que vuelvo sobre este tipo de post me agarran las ganas incontenibles de volver sobre un proyecto similar que tenemos con un amigo y colega. La generación de código es una de las cosas que más me interesan, pienso que debido a que interiormente no estoy absolutamente convencido hasta qué punto se puede “industrializar” la producción de software.

    Nuestro pequeño proyecto se llama SDA (“Smalltalk Developer Assistant” ) y como su nombre lo indica está orientado a generar código para Smalltalk (Squeak y Pharo) basado en algún framework web ya que pretendíamos cuanod lo iniciamos generar código para aplicaciones web simples.

    En su momento empezamos con Aida, luego focalizamos en Seaside, pero está ahí medio abandonado. Tomaba ideas de varios lugares, pero sobretodo de un producto argentino de unos 10 años atrás que se llamaba Multifile, una maravilla para la época que había desarrollado un Sr Rubén Martínez (recuerdo haberlo visitado en su oficina por calle Viamonte en aquél entonces).

    Vamos a ver cómo puedo canalizar todo este entusiasmo y si puedo encontrar el tiempo libre (quitarlo de tantas cosas aburridas) para ponerlo en esto :)

    Nos leemos, como decís vos!

  2. luis molina says:

    no estas solo, yo estoy peleando ahora con agilismo.es para que incluyan la generacion de código en sus charlas, ahora mismo todos los agilistas son scrum manager…

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>