Atenção: esse artigo tem uma palestra complementar. Clique e assista!

Atenção: esse artigo tem um vídeo complementar. Clique e assista!

Do que se trata o artigo

Veremos neste artigo como criar templates para geração de código-fonte com o T4. Veremos o que é o T4, como utilizá-lo no Visual Studio, e principalmente como podemos automatizar boa parte do nosso trabalho de desenvolvimento com ele.


Para que serve

O T4 (Text Template Transformation Toolkit) é uma ferramenta que nos permite gerar código-fonte baseado em templates. Com base em qualquer fonte de informação útil, podemos criar templates que automatizam a geração do código fonte de uma aplicação.


Em que situação o tema é útil

Imagine que você tenha um banco de dados com duzentas tabelas, e precisa criar uma classe para cada tabela. Como um bom desenvolvedor que você é, não vai codificar classe por classe não é? Ao invés disso vai criar algum processo que leia as tabelas e gere automaticamente essas classes. É em situações deste tipo que podemos tirar proveito do T4.

Resumo do DevMan

Text Template Transformation Toolkit, ou para os que adoram uma boa sigla: T4, é como o próprio nome diz, um Toolkit voltado para geração de código fonte, através da transformação de templates de texto. Na prática nós temos um template de texto em T4, que através de um processo de compilação gera um código-fonte.

Geração de código fonte é um tema muito extenso e polêmico. O próprio Visual Studio está cheio de ferramentas que geram código para nós. Isso acontece em várias tarefas triviais do nosso dia-a-dia, como criar uma tela no Windows Forms ou gerar um modelo de entidades no Entity Framework. O T4 é uma ferramenta da Microsoft que permite que você defina seus próprios templates, para gerar código da maneira que lhe for mais apropriada.

T4 é um engine de geração de código que se baseia em templates de texto. Esse engine já é incluso no Visual Studio 2008 e 2010, porém também pode ser utilizado no Visual Studio 2005 através de um download específico. Você pode utilizar os templates T4 para gerar qualquer tipo de texto que represente o código-fonte que você precisa. Ou seja, pode usar para criar código em Visual Basic, C#, XML, T-SQL, ou qualquer outra coisa que quiser, desde que seja texto. T4 tem uma dinâmica muito parecida com a do ASP.NET, e criamos os nossos templates utilizando blocos de texto e blocos de código. Esse código é colocado em diretivas de processamento, veja só um exemplo na Listagem 1.

Listagem 1. Hello World em T4


  <#@ template language="C#" #>
  Hello
  <# Write("World!"); #>

A primeira linha desse template é a diretiva <#@ template #>, que determina a linguagem em que o template foi escrito, neste caso o C#. A palavra Hello é um simples bloco de texto, que será reproduzido literalmente no arquivo gerado pelo template. Já a última diretiva <# #> representa um bloco de código. Aqui podemos incluir qualquer código C# que será compilado pelo Visual Studio, e o resultado é o código fonte que desejamos gerar.

Neste exemplo o resultado é um arquivo chamado HelloWorld.cs e o seu conteúdo é simplesmente as palavras “Hello” e “World”, uma embaixo da outra. Se você quiser fazer este teste, basta criar um arquivo com a extensão .tt no seu Visual Studio 2008, incluir o código da Listagem 1, e salvar o arquivo. O resultado você pode ver aqui na Figura 1.

Figura 1. Resultado do HelloWorld.tt

Após salvar o arquivo de template no Visual Studio aparecerá uma mensagem de segurança. Essa mensagem irá aparecer toda vez que você salvar um template, a não ser que você marque a opção “Do not show this message again” e clique em OK.

Na Figura 1 temos do lado esquerdo o nosso template, que ao ser salvo gerou automaticamente o arquivo HelloWorld.cs que aparece do lado direito da figura. No centro você pode ver na Solution Explorer, que o arquivo HelloWorld.cs é gerado abaixo do template, indicando que este é um arquivo gerado automaticamente pelo T4.

Veja que a linha <# Write(“World!”); #> resultou na simples palavra “World!”. Isso nos mostra que o código fonte gerado é o output do template, como se o template fosse uma aplicação console, e o resultado final apresentado no prompt de comando, o nosso código-fonte gerado.

Mais adiante, com exemplos mais práticos, vamos ver a vantagem que ganhamos com isso. O importante agora é entendermos como isso funciona. Veja na Figura 2, uma representação interessante de como o engine T4 funciona. Essa imagem foi retirada do Blog de Oleg Sych (veja na seção de links) que possui o maior e melhor conjunto de artigos e tutoriais sobe T4 que temos na Web.

Figura 2. Como o T4 funciona (retirado de http://www.olegsych.com/)

Note que o template é interpretado pelo T4 que gera uma classe que herda de TextTransformation. Essa classe sobrecarrega o método TransformText que tem como principal objetivo gerar uma única string que irá representar o conteúdo do arquivo a ser gerado. É um processo muito simples e realizado no momento em que o template é salvo no Visual Studio. O resultado, como você pode imaginar, pode ser o mais diverso possível.

Ferramentas

Como você pôde ver o engine do T4 é nativo no Visual Studio 2008, porém não temos muitos recursos para escrever nossos templates. Note que eles são como simples textos no Visual Studio, sem cores para diferenciar partes específicas do código, e também sem o tão querido IntelliSense. Além disso, ao adicionarmos um novo item ao projeto, não temos nenhuma opção específica para criarmos templates T4 (.tt).

O que mais faz falta neste caso são as cores diferenciadas e o IntelliSense. Para resolver este problema temos algumas opções. Neste artigo foi utilizada uma ferramenta chamada T4 Editor de uma empresa chamada Tangible Engineering. Eles oferecem uma versão gratuita que você pode baixar através do link listado na seção links no final deste artigo. Faça o download e instale o T4 Editor. Esse realmente vale a pena se você pretende trabalhar com o T4. Após instalado, você já pode notar a diferença abrindo o exemplo do Hello World que fizemos anteriormente. Confira na ...

Quer ler esse conteúdo completo? Tenha acesso completo