Text Template Transformation Toolkit
Text Template Transformation Toolkit, généralement appelée T4, est un template Open Source inclus avec Visual Studio.
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 |
Moteur de template (en) Framework |
Politique de distribution | Gratuit |
Licence | Licence MIT |
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
- 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
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
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
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
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
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
- (en) « Jetbrains Repository », sur GitHub (consulté le )