Categorías destacadas
programacion php    
Artículo
3
¡votar!

 Plantillas de Generación de Código(T4): Introducción

Definición

Una Plantilla de Generación de Código es una forma rápida y sencilla de construir código a través de bloques de texto y código escrito en lenguaje C# o VB.

Este tipo de plantillas se introdujeron con Visual Studio 2005.

Podríamos hablar de dos tipos de plantillas: procesadas en tiempo de diseño o procesadas en tiempo de ejecución.

¿Cómo se usan en Visual Studio?

Para poder utilizar plantillas T4 con una versión inferior a VS 2010, lo podremos realizar a través


1) Agregar Nuevo Archivo

2) Fichero de Texto

3) Renombrar la extension de Txt a TT.

4) Pulsar Aceptar a la advertencia que nos indicará: “Ejecutando esta plantilla de texto podemos dañar nuestro PC…”
Con el propio Visual Studio 2010, se pueden agregar directamente sin necesidad de renombrar la extensión.


¿Por dónde empezar?

Las plantillas van a estar formadas por:

- Directivas.
- Bloques de Texto
- Bloques de Código


Directivas

Para definir el código que va a generar la plantilla vamos a comenzar hablando de las directivas que vamos a utilizar a la hora de crear una plantilla y como se incluye cada una.

La forma de agregar una directiva a una plantilla se realiza a través de:

<#@ Directiva [Opciones..] #>

Directiva Template:

Esta directiva va a indicar a Visual Studio como se va a procesar el código incluido en la plantilla.

Las opciones de esta directiva son:

- Language: Código en el que va a estar escrita la plantilla. Sus posibles valores son:

* C# Valor por defecto
* VB

- Culture: Valor de la cultura.

- Debug: Va a permitir detectar donde se produce un fallo en el caso de suceder. El valor por defecto es “false”.

- HostSpecific: Va a permitir, si su valor es “True”, acceder a las propiedades de Visual Studio. El valor por defecto es “false”.

Ejemplo de utilización:

<#@ template [language=“C#”]

Directiva OutPut:

Esta directiva va a ser utilizada para indicar la extensión del fichero que va a generar la plantilla.

Las opciones de esta directiva son:

- Extension: nos permite definir la extensión completa que vamos a utilizar por ejemplo: “.cs”, “.htm”…

- Encoding: nos permite indicar la codificación utilizada.

Ejemplo de utilización:

<#@output extension=“.cs”#>

Directiva Assembly:

Esta directiva se utiliza para referenciar a una DLL y poder ser utilizada. Esta directiva no es necesario que se utilice con las plantillas procesadas en tiempo de ejecución si ya existen las referencias indicadas dentro del proyecto.

Las opciones de esta directiva son:

- Name: Nombre de la DLL que se va a incluir.

Ejemplo de utilización:
<#@ Assembly Name=“System.Xml.dll”#>

Directiva Import:

Esta directiva se va a encargar de incluir los espacios de nombre necesarios para la correcta generación del código de la plantilla.

Las opciones de esta directiva son:

- Namespace: Espacio de nombres que se va a incorporar.
<#@ import namespace=“System”#>

Directiva Include:

Esta directiva va a permitir la inclusión de texto de otro fichero dado.

Las opciones de esta directiva son:

- File: Nombre del fichero a incluir.

Ejemplo de utilización:
<#@ include file=“File.txt” #>

Directiva Parameter:

Esta directiva va a ser utilizada para definir parámetros que podrán ser enviados a la plantilla desde el contexto de Ejecución. El uso de esta directiva está pensado para las plantillas procesadas en tiempo de ejecución.

Las opciones de esta directiva son:

- Type: Es el tipo de dato del parámetro.

- Name: Nombre del parámetro.

Ejemplo de utilización:

<#@ parameter type=“System.Int32” name=“Repeticiones” #>



Bloques de Texto

Los bloques de Texto van a ser lineas que se van a incorporar al resultado de la plantilla tal y como se escriban en la plantilla.

Ejemplo de Plantilla:
<#@ template debug=“true” language=“C#” #>
<#@ output extension=“.cs” #>
using System;
namespace NameSpace{ 
class MyClas{  }
}

Resultado generado por la plantilla anterior:

using System;
namespace NameSpace{ 
class MyClas{  }
}

Bloques de Código

Los bloques de código van a ser un conjunto de sentencias que pueden ser alternados con los bloques de texto, y van a ser procesados para generar el fichero resultante.

Podríamos dividir los bloques de código en tres tipos:

Bloques Normales

Son fragmentos de código que van a ser interpretados y van a generar una cadena de texto que se va a incluir en el fichero generado por la plantilla.

Para utilizar este tipo de bloques será necesario delimitarlo por los caracteres: “&lt;#” y “#&gt;”.

Ejemplo de Plantilla:

<#@ template debug=“true” language=“C#” #>
<#@ output extension=“.cs” #>
using System;
namespace NameSpace{
class MyClas{
<#
for (int contador=0;contador<3;contador++)
{
#>
public void Metodo<#= contador #>()
{
//Ejemplo
}
<#
}
#>
}
}

Resultado generado por la plantilla anterior:

using System;
namespace NameSpace{
class MyClas{
public void Metodo0()
{
//Ejemplo
}
public void Metodo1()
{ 
//Ejemplo
}
public void Metodo2()
{
//Ejemplo
}
}
}

Bloques de Expresión

Este tipo de fragmentos de código van a servir para representar el resultado de una operación o de una función.

Para delimitar estos bloques se utilizan los caracteres: “<#=” y “#>”.

En los ejemplos anteriores se muestra un ejemplo de su utilización.



Bloques de Clase

Estos bloques de código se van a utilizar para encapsular funciones creadas en la plantilla para generar mas sintaxis.

Para delimitar estos bloques se utilizan los caracteres: “<#+” y “#>”.

Ejemplo de Plantilla:
<#@ template debug=“false” hostspecific=“false” language=“C#” #> 
<#@ output extension=“.cs” #>
<#@ import namespace=“System” #>
using System;
namespace MiEspacio
{
public class MyClas
{
<#
for (int contador=1;contador<=4;contador++)
{
#>
public void <#= Escribir(String.Format(“Metodo{0}”,contador)) #>()
{
//Ejemplo
}
<#
}
#>
}
}
<#+ string Escribir(string Cadena)
{
return Cadena;
}
#>

Resultado generado por la plantilla anterior:

using System;
namespace MiEspacio
{
public class MyClas
{
public void Metodo1()
{
//Ejemplo
}
public void Metodo2()
{
//Ejemplo
}
public void Metodo3()
{
//Ejemplo
}
public void Metodo4()
{
//Ejemplo
}
}
}

Fuentes:

MSDN: http://msdn.microsoft.com/en-us/library/bb126445.aspx
   
Publicado por:
Javier Torrecilla
Recomendar
a un amigo
Compartir
en redes
 
Comentarios
 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon