viernes, 24 de agosto de 2007

Generadores de Codigo

Un generador de código permite agilizar el desarrollo de aplicaciones, yo lo estoy utilizando con un proyecto pequeño para ver que resultados obtengo.
Hasta ahora he logrado ahorrar tiempo y a la vez programar dentro de todo algo prolijo, es una buena forma de no caer en la típica programación con toda la logica pegada a la interfaz al estilo VB6 cuando necesitas hacer algo rápido. Asi queda algo elegante sin que ello nos involucre horas y horas de programar capas.
La aplicación que utilice para hacer esto se llama MyGeneration esta aplicación permite utilizar distintos templates que escriben código, vos podes armar el tuyo o usar alguno de los que ofrece entre ellos dOOdads y NHibernate, el último es muy conocido en el mundo de java.
Yo opte por probar con dOOdads, que por medio de una jerarquia de herencia te permite crear clases que mapean contra las tablas de tu base de datos para que después puedas usarlas de esta forma:

// Load and Save
Employees emps = new Employees();
if(emps.LoadByPrimaryKey(42))
{
emps.LastName
= "Just Got Married";
emps.Save();
}

// Add a new record
Employees emps = new Employees();
emps.AddNew();
emps.FirstName
= "Mr.";
emps.LastName
= "dOOdad";
emps.Save();



// After save the identity column is already here for me.
int i = emps.EmployeeID;
Les comento a grandes rasgos los pasos que hay que hacer para que salga andando:
1) bajar MyGenerator desde sourcefoge que es donde esta la última version del generador y del template.(acá el link http://sourceforge.net/projects/mygeneration )
2) Una vez instalado el programa necesitaras tener una base de datos bonita y lista para mapear hacia objetos.
3) La arquitectura de oddododos (o como se escriba) tiene los siguientes modulos:
a- un proyecto que tiene las clases bases que van a implementarse luego por el generador de código
b- los procedimientos almacenados que utilizan las clases para guardarse en la base de datos
c- un conjunto de vistas en la base de datos que debes crear para utilizar datos relacionados de forma eficiente.
4) Entonces para que esto ande primero tenemos que agregar a nuestro proyecto el proyecto de arquitectura de dOOdads, el mismo se encuentra en C:\Program Files\MyGeneration\Architectures\dOOdads\CSharp para la version C#.
5) Una vez que elegimos cual es la base de datos a usar tenemos que marcar la clases de la carpeta C:\Program Files\MyGeneration\Architectures\dOOdads\CSharp\MyGeneration.dOOdads\DbAdapters que vamos a usar (ver los prefijos) para que compilen. Para ello la seleccionamos y en el cuadro de propiedades la maracamos para incluirla en el build.

En la imagen muestro las dos clases que abría que cambiar la propiedad "Build Action" para que compile un proyecto con base de datos SQL Server 2000 o 2005.

6) una vez que tenemos el proyecto referenciado, vamos a generar nuestras clases de negocio. Para ello iniciamos mygeneration configuramos la cadena de conexión hacia la base de datos que vamos a mapear y procedemos a buscar en el arbol de la izquierda los templates a usar.

7) para crear las clases de negocios usamos el template dOOdads Business Entity que se encuentra bajo la rama c# de dOOdas. Este template les genera clases abstractas, si quieren las concretas también hay que hacerlo con el mismo método.
La idea de las clases concretas bobas es que ahí metamos el código especifico de nuestras aplicaciones.
Si van a usar vistas para obtener datos relacionados con joins también se generan desde ese apartado.
8) Tambien necesitamos crear los procedimientos almacenados para eso elegimos la base de datos correspondiente en el arbol de template (por ejemplo Microsoft SQL Server) y corremos el template de dOOdad Stored Procedures. Esto escupe un monton de stores por cada tabla que son necesarios para correr las clases generadas por MyGeneration.
Aca esta bueno tocarlos un poco para que hagan lo que nosotros querramos, por ejemplo en mi caso modifique los deletes para que no borren sino que marquen un campo de baja, y toque también el procedimiento que trae todo para que solo traíga aquellos que no estan marcados como borrados.
TIP: si a cada columna le agregan un campo RowVersion de tipo timestamp, el template va a utilizarla para manejar la concurrencia de los updates y puede llegar a generarles una sentencia TSEQUAL que no compila en 2005, no se hagan drama cambienlo por un igual y sale con frítas.
9) Agregamos todo el código generado a nuestra solución de C#
10) Configuramos TransactionMgr para que obtenga una query string válida para nuestro aplicativo en la fúncion private IDbConnection CreateSqlConnection(BusinessEntity entity), donde pueden traerla directamente del app.config o web.config.

Y con eso ya tendríamos andando una elegante capa de datos completa en no mas de 30 minutos.
Cualquier cosa no duden en preguntar... en la página de mygeneration hay un pdf de 6 paginas que dice básicamente lo mismo que acá y esta práctico para ver como usar bien toda la interfaz que te da.
Por ejemplo tiene un generador dinámico de querys muy piola.

Eso es todo por ahora hasta la próxima espero que le sea útil a alguien....

6 comentarios:

Anónimo dijo...

Gracias banda, si me sirvió mucho esta explicación, que bueno que tiene imágenes y que está en español.

Sebastian

Anónimo dijo...

Acá puedes ver un generador de código personalizable. No te genera código preestablesido sino que tu mismo creas la plantilla con el block de notas o su propio editor según el lenguaje de programación que desees y según el motor de base de datos que uses:

Matrix Apocalyptic

lo vengo usando y sin duda te saca de apuros como cuando quires limpiar todos los cuadros de texto, los combos, declarar las variables, crear clases para c#, java#, vb ya que no es un generador sino un intérprete de plantillas y sobre todo es gratis.

Anrel dijo...

Sin embargo hay una herramienta llamada ABEL, lo cual significa Automatizacion Basada en Esquemas Logicos, esta herramienta te permite generar codigo para el diseño de tablas SQL Server 2000,2005,2008, MySQL, PostGreSQL, Oracle, Formularios VB.NET, JAVA, Páginas PHP, XML, Hasta tu diccionario de datos!!!!!!. Ademas lee y escribe XML, y encima si quieres alguna otra tecnologia ellos te lo modifican para que la soporte tbn!, y te puede importar desde tu servidor de base de datos una base de datos a su modelo, jalando tablas, campos, relaciones, todo!. Es una buenisima herramienta!. El software es de pago, es de AC soft live, su pagina es http://www.acsoftlive.co.cc . Como dije es de pago, pero para alentarnos la empresa te vende el software como un buffet, es decir, te cobra por lo que quieres que genere, si quieres MySQL, te cobra 15 dolares, y asi, precios realmente baratos. Sus diagramas son bravazos. Por supuesto yo tengo el FULL, esta protegidaso de pirateria, jaja, XD, suerte, en el catalogo de la pagina lo encuentran!, saludos

emilioleyes dijo...

Hola!! no tendrian un codigo de ejemplo con la implementacion de formularios, grids maestros-detalle y demás?? les agradecería!

Horacio Velasco Vocos dijo...

Hola ROD! Excelente POST! Yo vengo usando Mygen desde hace algun tiempo y es increible! Queria preguntarte como has abordado el tema de las clases de Negocio (BLL)? que metodos les escribes? Por ejemplo, digamos creas metodos como Buscar_Empleados(...) y dentro usas todos los metodos de las clases de la DAL ?

Saludos y Exitos!

Horacio

Rodrigo dijo...

Te comento, no recuerdo bien. Pero seguramente cree una capa de servicio que se encarga de administrar las entidades. En esa capa estarían los métodos que haces referencia.


Saludos,,,

Rodrigo