AjGenesis: Bases de su implementación

Published on Author lopezLeave a comment

Dediqué gran cantidad de tiempo al desarrollo de AjGenesis, mi proyecto abierto de generación de código desde un modelo de libre definición. Es tiempo de escribir que es lo que considero los principales puntos que formaron y hacen a AjGenesis.

Primero: el uso de un modelo libre en memoria, que es manejado y accedido como si fuera un objeto común en un lenguaje de programación. No necesito recorrer nodos XML o algo raro. Puedo visitar y manipular uno o varios modelos como si fueran objetos dinámicos. No adopté un modelo tipado o un modelo con un esquema predeterminado: el modelo es de libre definición, puedo poner en cada modelo lo que quiera y necesite. El modelo es deserializado desde XML o desde texto simple, o puede ser inyectado desde un programa: AjGenesis puede ser albergado en un programa .NET cualquiera y ser usado como una librería.

Segundo: el uso de un lenguaje simple y dinámico para ejecutar tareas simples o complejas, con acceso a una librería de clases rica. En AjGenesis, uso AjBasic, un intérprete que puede acceder a .NET. Puede usar, crear y cambiar objetos dinámicos, como son los modelos.

Tercero: el uso de plantillas, con soporte de expresiones y comandos (como ciclos, condicionales, etc…) escritos usando el mismo lenguaje dinámico.

(Algunas alternativas temprana fueron: usar XML con esquemas para modelos, y XSLT para las transformaciones. Las rechacé porque sentí que tenían límites que podrían afectar el desarrollo claro y extensible del sistema).

Ver:
Building an Application with AjGenesis
Code Generation with AjGenesis in a Real Project
Models for Code Generation in AjGenesis
AjBasic: An Open Source Basic-alike Interpreter
Generating Code Hello World with AjGenesis

Teniendo estos tres pilares, uso AjGenesis desde hace años, con diferentes tecnologías, lenguajes y frameworks (desde Java a .NET, desde JSP a ASP.NET a ASP.NET MVC, desde PHP4 a PHP5 a .NET4 y espero .NET5, desde DDL para MySql como para MS SQl Server, hay usuarios que lo usaron para Oracle, y un usuario ha estado generando código para Ruby on Rails!). Notablemente, estoy generando artefactos de texto para tecnologías que no existían al comienzo del proyecto. Y todo eso con mínimos cambNotably,os al AjGenesis mismo. Puedo ejecutarlo en Linux y en Max OSX gracias al proyecto Mono (Ver Running AjGenesis Using Mono and Ubuntu).

Ideas a implementar: la capacidad de inyectar el modelo (su deserializador), el poder elegir el lenguaje dinámico a usar (tengo planeado agregar AjSharp como lenguaje dinámico para las tareas y plantillas).

Pero si tengo los tres puntos que enumeré arriba, yo podría implementar AjGenesis en otras tecnologías. Como prueba de concepto, comencé hace unos días a implementar esas ideas esta vez usando Ruby: objetos dinámicos, que pueden cargarse desde archivos en formato YAML (o XML, tendría que explorar otros formatos), el uso de Ruby como lenguaje de las tareas, y el uso de templates usando ERB (o alguna otra tecnología de plantillas en Ruby).

Pueden ver el progreso de la idea en: https://github.com/ajlopez/AjGenesisRb

Nos leemos!

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

Leave a Reply

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