jueves, abril 20, 2006

Estado actual del proyecto

Este post es simplemente para que sepais que el proyecto sigue adelante y que no esta muerto el blog. Llevamos muchos dias sin poner ninguna entrada pero no estamos parados ni mucho menos. Estamos con la fase de generacion de código y hemos preferido esperarnos a poner posts relativos a este proceso porque mientras estabamos con ello nos han ido surgiendo multitud de dudas relativas a claridad de código, reusabilidad, buenas prácticas y demás, que hacen que prefiramos esperar a tenerlo todo 100% claro para dar consejos.

El caso es que ya lo tenemos todo claro y tenemos ya 1 generacion completa y otra " a punto de caramelo", por lo que podremos hablar en propiedad y sobre todo desde un prisma muy diferente al que pudieramos haber hablado hace unas semanas cuando empezamos con esta fase y aún no teniamos mas que la ayuda de las dsl tools y ninguna práctica.

Prepararos pues, para recibir en breve una oleada de posts relativos a la generacion de código de forma automática desde nuestro modelo y lo que es mejor, a como abordar de la mejor forma esta tarea. No os asusteis, os llevareis una grata sorpresa al ver la potencia que tiene la herramienta, creedme ;).

jueves, abril 06, 2006

Sintaxis de color en plantillas de generacion de código

Bueno, voy a poner un breve post de como utilizar la .dll de Modelisoft que nos provee de sintaxis de color en nuestras plantillas de generacion de código.
No se si habeis comenzado con la etapa de generacion de código, pero algo que se hace realmente pesado es programar sin la sintaxis de color, sobre todo porque el código esta lleno de tags y debido a que los caracteres de retorno de carro se vuelcan sobre el fichero de salida, hemos de tener especial cuidado y tenerlo todo al mogollon. Por eso nos viene bien conocer la extension que nos propone Modelisoft.

Los pasos son bien sencillos:
  • 1) Descargarnos el .zip con la .dll
  • 2) Modificar si es necesario el archivo install.bat que viene con el, para que apunte a la ruta correcta (en nuestro caso por ser español, lo tendremos en Archivos de programa...
  • 3) Todas aquellas plantillas de generacion de código que queramos tener coloreadas, han de tener la extension .t4 o .ReportTemplate
Tan simple como esto, ahora ya podemos programar de una forma mas "vistosa" y amigable.

martes, abril 04, 2006

Como depurar en la plantilla de generacion de codigo

Uno de los problemas mas comunes a la hora de ponernos con la generacion de código es la Navegabilidad dentro de la propia plantilla de generacion de código. Es decir, como hacer los bucles foreach, como nos movemos entre clases, qué propiedades tenemos accesibles,...
Todo esto en principio nos puede parecer trivial, puesto que hemos estado mucho tiempo modelando el diseñador, pero cuando tenemos algo puntual y sobre todo cuando nuestro modelo ya se va haciendo grande y dificil de acordarse de esos pequeños detalles, nos viene bien poder hacer breakpoints en la propia generacion de código.

Es muy sencillo, lo único que tenemos que tener presente es que lo que vamos a depurar no es la plantilla en sí, sino el código que mediante Sofware Factories se ha generado en C# a partir de nuestro fichero de template, y que generará nuestro archivo de salida. Parece lioso de entender pero si relees la frase anterior lo entenderas.

La idea general es la siguiente:

  • nuestroTextTemplate.Template -> codigoIntermedioC#.cs -> nuestroFicheroOutput.sql

Como veis, se hace en 3 pasos y lo que atañe a la depuracion lo tendremos en codigoIntermedioC#.cs que es el que depuraremos.

Lo que tenemos que hacer es bien sencillo:

  • Activar el flag debug="true" en la directiva "template"

<#@ template inherits="...ModelingTextTransformation" debug="true" #>

  • Importar el espacio de nombres System.Diagnostics

<#@ import namespace="System.Diagnostics" #>

  • Utilizar un bloque de expresion donde llamemos a la clase Debugger y hagamos un Breakpoint

<# Debugger.Break(); #>

Ahora, cuando pongamos el bloque "Expression", al guardar o darle al boton "GenerateAllTemplates", podremos pararnos en aquel punto marcado por nosotros. Pero recordad que lo que vereis sera el código C# intermedio generado mediante Sofware Factories.

Voy a poner un ejemplo de una prueba de plantilla de generacion de código simple con un breakpoint y luego parte de lo que veriamos en el Visual Studio con el debugger:


<# Debugger.Break(); #>
<# foreach(Clase clase in this.Esquema.classRole) { #>
<#=clase.Name#>
<# } #>

Aqui podemos ver una captura en plena depuracion: