Share via


Faça seu Gerador de Código com o T4 do Visual Studio

Tenho visto poucos arquitetos utilizando uma tecnologia interessante para gerar código de acordo com templates e que já está embutida no Visual Studio, sejam 2005, 2008 ou 2010.

Trata-se do T4 (Text Template Transformation Toolkit) Code Generation. Ele está contido no Visual Studio SDK e pode ser usado para gerar um código de acordo com um template que você ou seu time escreve.

Pense nele como a metade de uma infraestrutura para um gerador de código.

Um gerador completo costuma ter duas partes: a primeira é a responsável pela leitura dos metadados de uma especificação ou modelo; a segunda é a que lê estes metadados e gera algum artefato (código, html, etc.) a partir destes.

O Visual Studio SDK já vem com o Domain Specific Language Tools onde você pode especificar uma DSL visual (o Carlos Hulot falou muito disto no seu blog) e utilizar dentro dos templates T4 um conjunto de classes que permitem ler estes metadados para gerar o código correspondente.

Mas o DSL do SDK é um pouco complexo e você pode precisar de algo bem mais simples. Saiba que você pode construir seu próprio parser ou mero formulário para dar a entrada dos metadados que o template T4 usará para gerar seu código. Por exemplo, você pode fazer uma biblioteca para ler os metadados de um banco de dados e colocá-los a disposição para o template T4 percorrê-los gerando, por exemplo, classes com seus campos - como o Entity Framework faz.

Como exemplo, veja a figura abaixo.

image

Nela, você pode ver código que será rodado pelo template para gerar código (ele está sempre entre <# #> ). Em especial, o código no bloco que começa com <#+ é uma função de ajuda que retira espaços de dentro de strings e é utilizado no bloco logo abaixo para gerar strings do nome das cidades sem espaços. Textos fora dos blocos <# #> são copiados diretamente para o arquivo de saída.

Quando abrimos o arquivo gerado (genclass.cc) deste exemplo encontramos o seguinte texto:

Cidades sem " " entre nomes
NewYork
London
Seattle
SanFrancisco
NewDelhi

Simples, não é?

Existe um post ótimo do Scott Hanselmann que dá vários links interessantes sobre o assunto.

Fica a dica: se você está querendo trabalhar com MDD e pensa em fazer seu próprio gerador, dê uma olhada no T4!

Abraços

(Dica 2: pense no Oslo como o parser e o T4 como gerador)