Text Template Transformation Toolkit

Un article de Wikipédia, l'encyclopédie libre.
T4 - Text Template Transformation Toolkit

Informations
Créateur Novell, Xamarin, Microsoft
Première version
Dépôt https://github.com/mono/t4
Écrit en c#
Système d'exploitation Linux, Windows
Type Système de gabarit
FrameworkVoir et modifier les données sur Wikidata
Politique de distribution Gratuit
Licence Licence MIT

Text Template Transformation Toolkit, généralement appelée T4, est un template Open Source inclus avec Visual Studio.

Les fichiers source T4 permettent de générer des fichiers automatiquement à chaque exécution du programme (RuntimeTextTemplate), ou à chaque compilation de la solution (TextTemplate); et sont généralement désignés par l'extension de fichier ".tt".

Histoire[modifier | modifier le code]

  • 2005 : Microsoft a sorti la première version de T4 en même temps que la sortie de Visual Studio 2005
  • 2008 : Microsoft l'inclut à la sortie de Visual Studio 2008
  • 2010 : Microsoft rajoute des nouvelles fonctionnalités pour améliorer les performances
  • 2017 : Le moteur de template devient Open source, et supporte .NET
  • 2019 : JetBrains supporte maintenant T4 dans leur produit Rider[1]

Détails[modifier | modifier le code]

T4 est utilisé par les développeurs dans le cadre d'une application ou d'un framework pour automatiser la création de fichiers texte avec une variété de paramètres. Ces fichiers nouvellement générés peuvent être n'importe quel format de texte, tel que du code, XML, HTML ou XAML.

Pour utiliser un template T4, il faut disposer d’un environnement Visual Studio, d'une version supérieure à celle de 2005, et créer un fichier T4 dans notre solution.

Avantages[modifier | modifier le code]

Le gros avantage des T4 est d'automatiser la génération de code similaire ou redondant, par exemple, les fichiers DTOs, WebServices, DataEntities; mais aussi, dans des versions améliorés, des ServicesContracts, des Mappers et des Tests unitaires testant la nullabilité des arguments.

Les fichiers T4 ne se limitent pas qu'à la génération de code, mais aussi de tout type de fichier.

De plus, T4 ne nécessite pas d'installation

Inconvénients[modifier | modifier le code]

Il n'existe pas d'éditeur de fichier T4 natif. Les développeurs doivent écrire leur code direction sur un fichier blanc, il existe néanmoins plusieurs extensions Visual Studio tel que Devart T4 Editor, ou alors des extenstions Notepad++.

De plus, le T4 est difficile à appréhender aux premiers abords, car elle possède sa propre syntaxe axée autour d'un système de balise.

Balises[modifier | modifier le code]

Le T4 possède quatre balises permettant des actions différentes :

  • <# #> permet de saisir des instructions. Une instruction se compose de code .NET classique.
  • <#@ #> Ce sont des balises utilisées au début du Template afin de spécifier son comportement. Les directives permettent notamment d'indiquer le type de fichier de sortie et les assembly utilisables dans les blocs d’instructions.
  • <#= #> Ce bloc permet d’afficher le texte correspondant à la variable dans notre fichier de sortie.
  • <#+ #> C'est un bloc de fonctionnalités de classe. Cette balise permet de définir des fonctions utilisables dans le Template. Attention les blocks de fonctionnalités doivent être déclarés à la fin du fichier ".tt".

Exemple[modifier | modifier le code]

L'exemple ci-dessous utilise les 4 différentes balises, et le package de référence TemplateFileManager permettant de générer plusieurs fichier en un T4.

<#@ template language="C#" hostspecific="true" #>
<#@ output extension="txt" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.IO" #>

<#@ include file="..\Packages\T4.TemplateFileManager.2.2.1\tools\ttinc\TemplateFilemanager.CS.ttinclude" #>

<#
var manager = TemplateFileManager.Create(this);
for(int i = 0 ; i < 10 ; i++)
{
	var filename = this.GetFilename(i);
    manager.StartNewFile(filename);
#>

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated from a template at <#= DateTime.Now #>
//     File Declaration for the model : <#=filename#>             
// </auto-generated>
//------------------------------------------------------------------------------

Hello World !

<#
}
manager.Process();
#>

<#+ 
public string GetFilename(int number)
{
	return $"Say Hello ({i}).txt";
}
#>

Références[modifier | modifier le code]

  1. (en) « Jetbrains Repository », sur GitHub (consulté le )

Liens externes[modifier | modifier le code]