Ya en algún “post” anterior, Generando aplicaciones con AjGenesis comenté sobre cómo el proyecto AjGenesis genera código para distintas plataformas, incluyendo VB.Net 1/2, C# 1/2, y usando ADO.NET o NHibernate. El proyecto está basado en templates, que cualquier puede adaptar para generar como quieran los artefactos de texto que necesiten, en cualquier tecnología. AjGenesis está escrito en VB.Net, y es un proyecto de código abierto.
Gracias a la lectura de otro “post”, Sobre la generación de código, surgió una iniciativa de Omar del valle Rodríguez, para generar un modelo que le interesa, en NHibernate. Pueden ver el thread original en la excelente lista de arquitectura del Microsoft User Group de Argentina:
http://www.mail-archive.com/arquitectura@mug.org.ar/msg00349.html
(me temo que no quedaron aún publicadas las respuestas al mensajes, entre ellas la propuesta del bueno de Omar).
La idea de Omar es implementar, según sus propias palabras:
“Una empresa, cuyos clientes pueden ser personas o empresas, los clientes se deben tratar como tal, independientemente de si es persona o empresa, pero deberíamos poder identificar a cada uno por separado..
En el resultado que espero siempre veo que se genere: 3 tablas, cliente, persona y empresa, con una relación uno a uno entre ellas partiendo de cliente.. y en el modelo sería un objeto cliente del cual heredan persona y empresa.”
Bien, interesante modelo. Me llevará a implementar por primera vez, en mis modelos (recuerden que el modelo del AjGenesis ES LIBRE, cualquiera puede armar el modelo que quiera), entidades con generalización. Aquí Cliente será la generalización de Persona y Empresa. Según lo pedido por Omar, habrá tres tablas: una donde estan los datos de todos los Clientes, otra donde estarán los datos adicionales de una Persona, y otra para los datos específicos de Empresa.
Luego, en la discusión del tema, llegamos a tener como objetivo a generar, de nuevo, en palabras de Omar:
1- Client.hbm.xml (archivo de mapeo para NH)
2- Client.cs (entidad en C# que describe un cliente)
3- User.cs (entidad en C# que describe un cliente de tipo “persona”)
4- Company.cs (entidad en C# que describe un cliente de tipo “empresa”)
5- ClientFactory.cs (Factory que me permite manipular una entidad Cliente [Insert, Update, Delete, GetAll, GetByID, GetAllCompany, etc, etc])
6- Client.sql (script para SQL Server con el código de las tablas a incluir)
Además, podríamos generar el código para VB.Net, y algunas páginas ASP.NET para navegar y actualizar las entidades del modelo, como hacen los anteriores ejemplos de AjGenesis. Omar proveerá una implementación destino, y armaremos el modelo, los templates y tareas en AjGenesis, para producir esos archivos y algo más.
El problema está planteado. Veremos cómo progresa, en nuevos artículos.
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com/