martes, marzo 14, 2006

Primeros pasos con la generacion de código

Voy a poner una breve introduccion de lo que mas nos puede servir para meternos de lleno con la generacion de código utilizando DSL Tools.

Primeramente, lo que tenemos que hacer es añadir un nuevo item en el proyecto: Proyect-> Add new Item -> Template -> Text File. Una vez tengamos la plantilla, lo renombramos como queramos, por ejemplo "sqlPlantilla.sql"

En la ventana de propiedades, hemos de poner en la celda de "Custom tool" la palabra: "TextTemplatingFileGenerator", para que el generador de plantillas, utilice esta plantilla para generar código. Podemos tener tantas plantillas como queramos.

TAGS PARA LAS PLANTILLAS
  • Directivas interesantes:
    • <#@ output extension=".sql" #>
Con esto nos aseguramos que la plantilla, va a generar un archivo nombrePlantilla.sql con el código generado.
Cabeceras e inclusion de copyright y demas:
Mediante la directiva include, podemos incluir en la generacion de código, una serie de informacion externa como copyright, encabezados, pies de pagina...
    • <#@ include file="c:\test.txt" #>
    • <#@ template debug="true" #>
      <#@ import namespace="System.Diagnostics" #>
Con estas dos directivas, se supone que podemos hacer depuracion en la generacion del código, justo mientras se encuentra el TextTemplatingFileGenerator en ejecucion, pero por desgracia no he podido probarlo porque me ha dado un error. Tengo que mirarlo mas en profundidad porque me interesa muchisimo.
Para poner breakpoints, basta con poner esto donde queramos pararnos:

<# Debugger.Break(); #>

  • Sentencias de Código:
Las sentencias de código tienen la siguiente sintaxis: <# SentenciaCodigo #>. Estas sentencias se tienen que escribir en el lenguaje que hayamos decidido utilizar para programarlas (por defecto C#) y han de compilarse correctamente, por lo que no podemos cometer errores de sintaxis, como es de suponer.

  • Bloques Expression

Los bloques Expression tienen la sintaxis <#= Expression #> y siren para añadir Strings al código generado en funcion de variables y/o propiedades calculadas.

Por ejemplo, esto seria un trozo de código con una sentencia de código que no se verá y un bloque Expression que si que se verá reflejado en el fichero de código que generemos.

<#
int result = 2*9
#>
<#= result #>

Lo que hara esto sera ejecutar el 2*9 mientras se encuentra el parser analizando, compilando y ejecutando nuestro template y escribir el valor de result al fichero de generacion de código. Es decir que en el fichero generado obtendriamos "18" solamente.

No hay comentarios: