Modelo textual para generación de código con AjGenesis

Published on Author lopez1 Comment

Estuve trabajando agregando una “feature” a mi proyecto de generación de código AjGenesis. El sistema maneja un modelo definido por el usuario, que puede ser cargado en memoria desde archivos .xml. AjGenesis puede procesar el modelo, completarlo, invocar a objetos .NET, crear directorios, archivos y aplicar templates para crear código y archivos de texto cualesquiera.

Pero el modelo reside en memoria: la deserialización desde XML es solamente una opción de implementación. Este fin de semana, he agregado el nuevo código en el repositorio de código del proyecto Codeplex: ahora, todo usuario de AjGenesis puede expresar su modelo en texto plano.

El modelo puede, entonces, expresarse en simples archivos de texto. Veamos un ejemplo.

El ejemplo más simple que se me ocurre es el modelo para una aplicación Hello World en AjGenesis. El modelo en XML es:

<Project Company="ajlopez.com"> <Message>Hello, World</Message> </Project>

Ahora, podemos expresar el mismo modelo en un archivo de texto:

Project Company = "ajlopez.com" Message = "Hello, World" End Project

Si necesitamos más mensajes, en XML escribíamos:

<Project> <Messages> <Message>Hello, World One</Message> <Message>Hello, World Two</Message> <Message>Hello, World Three</Message> </Messages> </Project>

Ahora, en texto, podemos escribir:

Project Messages Message = "Hello, World One" Message = "Hello, World Two" Message = "Hello, World Three" End Messages End Project

Se puede cargar el modelo desde el programa de consola, indicando un archivo .txt o .xml:

..\..\..\bin\AjGenesis.Console Model.txt ModuleVb.tpl HelloWorld.vb

..\..\..\bin\AjGenesis.Console Model.xml ModuleVb.tpl HelloWorld.vb

Lo mismo podemos hacer desde tareas de NAnt: cargar un modelo, en un archivo .XML o .txt.

Hay más ejemplos en:

Hello world Examples

Un modelo más realista, donde describimos entidades en un XML:

<?xml version="1.0" encoding="utf-8" ?> <!-- An Entity with Properties --> <Entities> <Entity Name="Customer"> <Description>A Customer</Description> <Properties> <Property Name="Id" Type="Id"/> <Property Name="Name" Type="Text"/> <Property Name="Address" Type="Text"/> </Properties> </Entity> <Entity Name="Supplier"> <Description>A Supplier</Description> <Properties> <Property Name="Id" Type="Id"/> <Property Name="Name" Type="Text"/> <Property Name="Address" Type="Text"/> </Properties> </Entity> </Entities>

ahora puede ser expresado en texto (no es el mismo modelo de arriba, pero similar):

Entities Entity Customer Description = "Customer Entity" Properties Property Id Type="Id" Property Name Type="Text" Property Address Type="Text" End Properties End Entity Entity Supplier Description = "Supplier Entity" Properties Property Id Type="Id" Property Name Type="Text" Property Address Type="Text" End Properties End Entity End Entities

Una vez que el modelo es cargado en memoria, AjGenesis lo procesa como siempre, sin importar su forma original, texto o XML.

Más sobre AjGenesis:

Posts about AjGenesis (English)
Posts sobre AjGenesis (Spanish)

Apenas relacionado, pero interesante:

Problems for Textual Model Notations

Nos leemos!

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

Leave a Reply

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