Hola gente! Como saben, soy un entusiasta de la generacion de codigo. Tambien sobre la generacion de artefactos cualesquiera, desde un modelo libre. Lo importante es partir de un modelo (que pueda alimentarse desde varias fuentes o manualmente), pero libre. Asi podran expresar en ese modelo todo lo que necesitan describir del sistema que modelan. Y luego, en modelos, plantillas y tareas separadas, adosarle los temas tecnologicos (lenguaje (.NET, Java, PHP, lo que sea....), patrones, interfaces de usuario, estilos arquitectonicos, base de datos, transporte (Web Services, WCF, Remoting, RMI), framework (Struts, Spring, ...), servidores (Tomcat, JBoss....) ....) que no son parte del sistema. Como siempre, pueden ver algunas opiniones y trabajos mios en el proyecto AjGenesis desde
http://msmvps.com/blogs/lopez/archive/tags/AjGenesis/default.aspx Pero hoy queria comentar que el bueno de Jonathan Cisneros ha escrito Genesis Studio, una IDE para ese proyecto. Pueden ver mas detalles en: http://msmvps.com/blogs/lopez/archive/2007/12/24/genesis-studio-una-ide-para-ajgenesis.aspx http://ajlopez.wordpress.com/2007/12/24/genesis-studio-an-ide-for-ajgenesis/ Hay una lista en espaniol sobre generacion de codigo en: http://groups.google.com/group/codegeneration Nos leemos! Angel "Java" Lopez http://www.ajlopez.com/ ----- Original Message ----- From: Angel "Java" Lopez To: [email protected] Sent: Friday, August 03, 2007 10:39 AM Subject: [puntonet] Sobre generacion de codigo Hola gente! Hola Esteban! Gracias por tu comentario, me alegra que disfrutaras del post. Jeje. me costo mis horas escribirlo, y un cuarto de siglo pergueniarlo. :-) Ciertamente, la generación de código es para lo standard. Lo que es standard, dependerá de la situación de cada uno. En los artículos con ejemplos que están al final del post, hay ejemplos que generan justamente lo que mencionas: - Procedimientos almacenados - Mapeadores de datos, DAOs, o Gateways - Entidades, con relaciones o no - Capa de servicios - Algun ejemplo genera algo de web services, o entidades para remoting - En un ejemplo no publicado, lo uso para generar Value Objects, que viajan a una capa "remota", sin exponer las entidades - ABMs básicos, con navegación por el modelo Pero lo standard es lo que uno quiera o necesite. Podria imaginar un modelo que especifique los pasos de un workflow (sin la lógica de negocios explicita), y luego generar código para distintos sistemas de workflows. Lo mismo con lo de arriba. Cuando uno tiene que aprender una tecnología (digamos estamos en ASP.NET, y en el cliente nos piden JSP, porque "todo es Java", y es "multiplataforma"), resolverá lo standard, nuevamente, una vez, y luego lo abstrae para que el generador de código genere lo que necesitemos. Asi planteado, podría enumerar: - Tenemos problemas a resolver en desarrollo de sistemas (como hacer un sistema de consorcios, validaciones, seguridad, adopción o no de patrones, acceso a datos, exposición de datos remotos, etc..) - Tenemos una tecnología (digamos, somos especialistas en .NET 2.x) - Resolvemos un sistema, con los problemas iniciales, y la tecnología que nos toca - Cuando vamos a resolver otro sistema, gran parte de la solución que encontramos (ya sea en capas, ya sea con EntLib, ya sea que escribimos todo a mano en el Click del botón del formulario), podemos encararla automáticamente - Debemos armar un modelo de lo que varia de sistema a sistema (por ejemplo, en los ejemplos que muestro, las entidades de negocio, podrían ser los formularios, las encuestas de un CRM, los mensajes en un sistema distribuido, etc), y luego, generar los artefactos de tecnología según lo que ya sabemos que nos sirvió. O sea, tenemos o S1: solución concreta en Tecnologia T1 o M1: modelo de lo que sabemos que varia de sistema S1 a Sn o GC1: templates que generen de M1 gran parte de S1 o M2: modelo del sistema S2 o Aplicamos GC1 (los mismos templates) y se genera gran parte del sistema S2 Recalco lo de gran parte: por mas que sea solo alguna de los artefactos de mas arriba, en el peso de código, es "un moton". Antes, cuanto tenia que preparar algo, me pasaba horas para generar lo mas simple, repetitivo, y menos importante. Ahora aprovecho ese tiempo para realmente concentrarme en lo importante. - Cuando cambia la tecnología (ya sea que tengo que dar otro curso, o Uds. Tienen un nuevo cliente), se solucionan los problemas que encaramos en la S1, para generar un S1b en, digamos JSP. Una vez estabilizado, generamos los templates GC1b para aplicar o M1 + GC1b = gran parte de S1b o Mn + GC1b = gran parte de Snb Y voila. Es decir: La generación de código nos pone en claro, los problemas iniciales, el modelo que independiente de la tecnología, la solución que encontramos a los problemas usando la tecnología T1, y nos permite, luego, generar gran parte de los sistemas nuevos, en la tecnología T1, y adaptarnos, tener claro, estar "aware" del camino a recorrer, cuando pasamos a la tecnología T2. La tecnología siempre cambia, la forma de solucionar los problemas, puede depender de nosotros, del departamento de IT, de la consultora, los tipos de sistemas también, no hay una sola forma de hacer las cosas.. Y la generación de código (con atributos como modelo libre, genero lo que yo quiero y demás), nos permite encarar todo ese cambio, y elevar la abstracción. O sea: nos ayuda a resolver "la tarea compleja" del cambio. Nos leemos! Angel "Java" Lopez http://www.ajlopez.com/ From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Esteban A. Zibecchi (MUG) Sent: viernes, 03 de agosto de 2007 09:55 a.m. To: [email protected] Subject: [puntonet] Sobre generacion de codigo Que lindo mail Angel, realmente lo disfruté mucho.....
