Create your own awesome maps

Even on the go

with our free apps for iPhone, iPad and Android

Get Started

Already have an account?
Log In

T4 Textvorlagen by Mind Map: T4 Textvorlagen
5.0 stars - 1 reviews range from 0 to 5

T4 Textvorlagen

Einführung

Architektur

Komponenten, Engine, kontrolliert den text template transformation - Prozess, kann nicht an eigene Bedürfnisse angepasst werden, Host, Schnittstelle zwischen Engine und Benutzerumgebung (Visual Studio), Verantwortlich für, lokalisieren von Dateien und Assemblies, Generierten Text in Datei schreiben, Default-Erweiterung setzen (*.cs), Empfangen der Fehler von der Engine, Anzeigen, Logfile schreiben, kann angepasst werden, ITextTemplatingEngineHost, Directive Processors, Bereitstellen von zusätzlicher Funktionalität und Instruktionen für die Engine, Bsp., Lesen aus einer Datenbank, Verarbeiten von Metadaten, Öffnen und lesen von Dateien, DSL - Diagramme, XML Dateien, Alles was ein Interface hat, um ausgelesen zu werden, SPARX, SAP, Typen, Built-in, Basis, built-in Direktiven, assembly, import, template, output, include, parameter, Generated, im Bereich der DSL-Werkzeuge, Aktivitätsdiagramme, Klassendiagramme, Use Case Diagramme, Custom, Klasse DirectiveProcessor, Bsp. VolatileAssembly (T4Toolbox)

Custom Tool, TextTemplate, TextTemplatingFileGenerator, PreProcessedTemplate, TextTemplatingFilePreprocessor

Verbesserungen mit VS 2010 SP1, assembly Direktive sperrt nicht mehr die DLL bis Solution geschlossen wird, bisher VolatileAssembly aus der T4-Toolbox, Fallback mit Registry-Key, HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node]\Microsoft\VisualStudio\10.0\TextTemplating, ShadowCopy=false, Verbesserte Inheritance-Strategien

Sicherheit

Gefahren, Beliebiger Code innerhalb der Statementblocks möglich, Auf Schadcode anfälliger Directive Processor, Warnung auf eigene Gefahr

Prozessablauf

Quelle Oleg Sych, mit Speichern des Templates, Kompilierung, Ausführung, in 2 Schritten, 1. Schritt, Engine verarbeitet das Template, parsen von, Verarbeitungsinformationen, Text und Codeblöcke, generieren einer TextTransformation-Klasse, kompilieren in eine .Net Assembly, 2. Schritt, Engine erzeugt eine Instanz von GeneratedTextTransformation, Aufruf der Methode TransformText, Rückgabe des Strings in die Ausgabedatei

Vorteile

Code Generator innerhalb der Solution, keine zusätzliche Software/Lizenz, besserer Überblick, was wurde automatisiert, mit Visual Studio Host, Transparenz, Vereinfachte Optimierung von Code, Bsp. SQL, Refactoring, Erweiterungen für bestimmte Funktionalität, Except, nahtloses Zusammenspiel mit Entwicklungsumgebung, FileCodeModel, Textbasiert, Teil von Visual Studio, kombiniert mit T4 sehr mächtig, Automation Model, Sync mit Projektmappe

DSL/UML Konsistenz, ermöglicht die Übereinstimmung von Modell und Code, Entwurf, Implementierung, Dokumentation, Einfacher lesbar, Erstellen eigener DSL

Geringer Lernaufwand, Syntax angelehnt an klassischen ASP, PHP, kann C# oder VB innerhalb der Blöcke benutzen

Anpassbarkeit, Erweiterbarkeit, Einsatz für eigene Generatoren möglich, Verwendung in eigenen Anwendungen, Preprocessed Templates, keine Abhängigkeit zu VS 2010

Nicht an Wizards gebunden, Code entspricht nicht immer den Bedürfnissen, es wird mehr generiert als benötigt wird, Offen für neue Sprachen bzw. Diagramme, Wizard ist meist T4

Technologieunabhängig, beliebiger Text-Output, cs, vb, xml, sql, dtsx, resx, xaml, .java, uvm.

Codequalität kann verbessert werden, korrigierte Fehler im Template gehen nicht vergessen, keine Flüchtigkeits- oder Rechtschreibfehler, Gleichbleibende Qualität, Codeerstellung ist reproduzierbar

Produktivität kann gesteigert werden, Automatisierung stupider Aufgaben, Prozeduren für EF, Mockobjekte, Factories, Repositories, Schnittstellen, Unittests, Fehleranfälligkeit sinkt, Nachträglicher Änderungen sind einfacher möglich, T4 ist in den Entwicklungsprozess eingebunden, Prozessautomatisierung mit VS Automation Model, Bsp. Ein-/Auschecken Code, Linken von Dateien, VS File Code Model, Nachbearbeitung von Code

Kosten können bedingt gesenkt werden, Paretoprinzip beachten, Codegenerierung kann nicht vollständig ermöglicht werden, Mehr Zeit für Dinge die als erstes aus Kostengründen in einem Projekt wegrationalisiert werden

Blick auf die Kundenanforderungen

Zusammengefasst, Zusammenspiel mit Entwicklungswergzeug VS, Verwendung von DSL, Anpassen der Templates, Dinge die von einen guten Code Generator erwartet werden erfüllt T4

Nachteile/Herausforderungen

kein Intellisense, nur mit Zusatztools, tangible T4 Editor

keine volle Shortcut-Unterstützung, Bsp. CTRL K,C

keine Code Snippets, ebenfalls nur mit Zusatzstools, Snippet Support innerhalb der Statement Blocks, C# Snippets jedoch ohne Intellisense, Eigene Snippets nur, wenn im VS-Basisverzeichnis abgelegt, C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC#\Snippets\1033\Visual C#\, C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC#\Snippets\1031\Visual C#

Refactoring-Tools wie CodeRush funktionieren nicht innerhalb der Statement and Class Feature Blocks, wird sich auch in naher Zukunft nicht ändern, Alternative Vote for S134920

gewohnte Komfort von VS kann zur Zeit auch nicht mit Zusatztools erreicht werden

kein Framework, T4 Toolbox, Keine Synchronisierung von Code und Model (leistungsschwache Versionen von VS), Eigenimplementierung erforderlich, Bei gleichzeitiger Änderung von Code und Model ist ein Zusammenspiel erforderlich mit, Stringbuilder-Variable GenerationEnvironment (T4), FileCodeModel, Es gibt Tools auf den Markt die in dieser Hinsicht leistungsfähiger sind, aber auch hier, es gibt nicht die Silberkugel, HowTo's und Blogs, Nicht immer die optimalsten Lösungsansätze

MSDN Doku ist etwas dürftig, keine Informationen zu Preprocessed Templates (Vorverarbeitete Textvorlage), mittlerweile besser, Gemeinsamkeit mit anderen Code Generatoren

Sicherheitslücken möglich

Unterlagen müssen in einer normalisierten Form vorliegen, Problem bei, unstrukturierten Unterlagen, proprioritären Formaten, Anforderungsdokumente liegen nicht immer so vor, dass diese für die Automatisierung genutzt werden können

Gefahren, Eierlegende Wollmilchsau, Spaghetti Code, Anpassen bestehender Templates, kann zu Mehraufwand führen, Fehlende Design-Überlegungen, Hintergrund, klassisches Antipattern, wenig strukturiert, keine Wiederverwendbarkeit möglich, Coderedundanz (Verletzung DRY), Aber, bei kurzer Lebensdauer kann bis zu einem gewissen Grad schlechter Code toleriert werden, Code Qualität steigt nicht weiter, Generierte Technologie wird nicht angepasst

Aufbau eines Text Templates

Abhängigkeit zu Microsoft.VisualStudio.TextTemplating

Direktive

built-in, include, Registry, Angabe des Dateinamens ohne Pfadangaben, HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\VisualStudio\10.0\TextTemplating\IncludeFolders\.tt, falls vom Pfad nicht gelesen werden, einmalig versuchen Visual Studio als Administrator zu öffen, bei 32bit Systemen ohne Wow6432Node, HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0_Config\TextTemplating\IncludeFolders\.tt, Schlüssel temporär, VS 2010, Windows-Umgebungsvariable, %dev%\Name.tt, setx, VS Macro SolutionDir, <#@ include file="$(SolutionDir)t4inc\T4.tt" #>, Relative Pfadangaben, assembly, GAC, PublicAssembly Ordner, C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies, VS 2010, Windows-Umgebungsvariable, %dev%\Name.tt, setx, VS Macro SolutionDir, <#@ assembly name="$(SolutionDir)t4inc\T4.Core.dll" #>, Mit VS 2010 SP 1 wird die Assembly nicht mehr gesperrt, Alternative bisher, VolatileAssembly, assembly arbeitet ab SP1 ähnlich

Syntax

Statement, <# #>

Expression, <#= #>, Alternativ, Write("");, WriteLine("");

Class Feature, <#+ #>, Hilfsfunktionen, Klassen, Keine Extension Methods

Processing Directive, <#@ #>

Textblock

Fehlerbehandlung

Error("Fehler");

Warning("Warnung");

Unbehandelte Fehler erzeugen einen Abbruch

Aber keine Information möglich

Extension Methods nur über Assembly

RunCustomTool

TextTemplatingFileGenerator

Werkzeuge

tangible t4

T4 Editor 1.9.64 Pro, Ermöglicht Ausführung während Buildvorgang

T4 Toolbox

MvcContrib

Clarius

Hilfsmittel Entwicklung zur Qualitätssteigerung

CAT.NET

FxCop

StyleCop

Szenarien

Beispiele

ADC 2010, Voraussetzungen, T4Toolbox, Entity Framework CTP4, Tangible T4-Editor, VsAutomationHelper.CS.tt aus CodeGallery, Resharper kann aktuell zu abstürzen führen (Neues Public Build ab Mitte November verfügbar oder tangible kontaktieren), System.Diagnostics.Contracts, Excel 2007 oder höher, Hinweis, Mehrere Beispiele im Basic-Bereich arbeiten mit dem gleichen DemoArray, reduntante Klassennamen (Fehler beim kompilieren), erzeugte Dateien löschen, VsAutomationHelper.CS.tt liegt in einem Registry-Folder, deswegen keine Pfadangaben, Ursprungsklassen des FileCodeModelRefactoring liegen im backup-Verzeichnis des Beispiels

Webcast

Erstellen von Code-Dateien pro Klasse

Variante mit EF Filemanager

Einfache Variante

Erstellen von Dateien in andere Ordner und Projektmappen

Einmaliges Erstellen von Dateien/Klassen

T4MultipleFilesSimple

Verwendung des VS Automation Model

T4MultipleFilesSimple

Template mit Parameter

T4Model T4ParameterTemplate

Verwenden von Warning und Error

T4Introduction

Debugging von T4-Vorlagen

T4MultipleFilesSimple

debug="true" in Template-Direktive

Debugger.Break(), Problem, Default-Installation stürzt ab (64bit), Lösung, Ab VS2010 Debugger.Launch(), Startet auch mit debug="false" aber kein Debuggen möglich, Frage neues Fenster mit nein, schliesst auch mal die eigentliche VS Instanz, andere Versionen, bei Vista und Win 7 Registry Problem, DbgJITDebugLaunchSetting, 0×10 in 0×2 ändern, Verhalten wie XP bzw. Win 2003, Schlüssel gibt es 2mal für 64bit-Systeme in Wow6432Node

Include-Vorlagen

T4Model

Class Block, Ausgabelogik (Write), wenn möglich nur im Sonderfall

VS 2010, Windows-Umgebungsvariable, %dev%\Name.tt, setx, VS Macro SolutionDir, <#@ assembly name="$(SolutionDir)t4inc\T4.tt" #>

Verwenden bestehender Logik

T4Model

Verwenden eigener Assemblies, Vorteil, Einsatz von Extension Methods, Verwendung bereits existierender Logik, GAC, oder PublicAssembly-Verzeichnis von Visual Studio, C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies, File, Problem, Assembly gesperrt, Lösungen, Solution schliessen und wieder öffnen, oder VolatileAssembly CustomDirektive aus T4Toolbox

Refactoring

Hinweis auf Don^t repeat yourself

Erstellen erweiterbarer Klassen

Vererbung

partial, Double derived pattern, DSL, bei Pattern-Fanatikern bevorzugen, um ziellose Diskussionen wegen partial zu vermeiden ;-)

Erstellen eigener VS Item Vorlagen

Preprocessed Templates

T4PreprocessedTemplate

UML/XML

T4Model

wenn API für C#

VS FileCodeModel, Roundtrip-E., Sync

Zusammenfassung

Im Bereich DSL/UML trägt es zur Konsistenz bei

Diagramm - Code Konsistenz

Erstellen der Dokumentation

Technologisch flexibel

Offen für neue Diagrammformen, eigene DSL's

Nachteil, auch einfache Dinge erfordern eine Spezifikation (Attribute), Unreife Diagramme

Man muss sich nicht mehr mit dem generierten Wizard-Code zufrieden geben

Anwendbar in eigenen Applikationen

Preprocessed Templates  

Qualitätsverbesserungen

Stupiden Code automatisieren

Mehraufwand reduzieren, Store Proecedures

Refactoring vereinfachen

T4 Template versioniert mit Solution

Berücksichtigung eigener Prozesse

Bedienung und Handhabung weicht ab

Fehlende Shortcut-Unterstützung

Debugging, Haltepunkte, Launch() statt Break(), Eigenes Debugfenster, gelegentliche Abstürze

Der eigentliche Komfort von VS wird auch nicht mit Zusatztools erreicht

T4 Dokumentation beruht überwiegend auf Web 2.0 und Oleg Sych

Viele Beispile und Vorlagen erhält man mit tangible und der t4 toolbox

Ressourcen

MSDN

Webcast

Oleg Sych

u.a. Artikel zu MS Build Integration

tangible

T4 Editor Code Gallery

T4 toolbox

Beispiele, Prozeduren, Dateien erstellen mit Ordner und solution-Struktur, Vorgefertigte Templates

Chirpy

VS AddIn

Ermöglicht vereinfachteres Ausführen von Text Templates während des Buildvorgangs

Alternative zu TextTransform.exe mit Batch-Files

Gareth Jones

Blogbeiträge zum Thema T4

Designüberlegungen

Anpassung bestehender Templates

sollte ein Sonderfall bleiben, wenn es nicht die eigenen sind, Bsp. T4 Self Tracking Entities

Erweitern bestehender Template

Arbeiten mit partial, Bsp. Schnittsteleenerweiterung

Anlegen von Codeschablonen

Nested Templates

Aufbereitung der Informationen

Ausgabe des Codes, Parametriesiertes Text Template, PreProcessed Template

Richtlinien im Team besprechen

Grauzonen zulassen, bevor Richtlinien lücken öffnen  

Struktur

Logik

Sicherheitsaspekte

Kein Dogma, Glauben != Wissen

Aufbau eines Preprocessed Templates

Vorteile

Leichter zu debuggen

Intellisense ohne Zusatztools, in der partial class

Syntax und Kompilercheck

Keine feste Abhängigkeit zu Visual Studio

In beliebigen .NET-Anwendungen verwendbar

Erweiterbar, partial class, virtual TransformText, tricky, im Gegensatz zu einfachen TextTemplates wird die GenerationEnvironment-Varialbe in der ersten Zeile auf null gesetzt, WriteLine-Anweisungen am Anfang der überschriebenen Methode sind in der Ausgabe nicht vorhanden

Generierten Code vor Änderungen schützen, bsp., Validierung

Herausforderung

Preprocessed Texttemplates mit Referenzen zu anderen Dll´s, werden diese in normalen Textvorlagen verwendet, wird das auflösen dieser Dll´s tricky, Stichwort: Temp. AppDomain

Nicht unterstützt wird

Autor des Templates ist dafür verantwortlich, es werden keine Fehler erzeugt.

Output Directive

Assembly Direktive

Debug-Parameter

Verhaltensänderung

template property Inherits, fehlt, Implementiert Standardbasisklasse, Implementiert Standardmethoden von TextTransformation, vorhanden, Implementierung der Basisklasse ist Aufgabe des Templateautors, ohne Standardmethoden, Templateautor ist für Implementierung verantwortlich, in diesen Szenario kann auch der Einsatz von hostspecific nützlich sein

RunCustomTool

TextTemplatingFilePreprocessor

Motivation

Bezug auf CodeDOM

sehr aufwendig

Codeerstellung auf Basis von XML

Kosten-/Nutenverhältnis für eigenen Szenarien

Theoretisch Erzeugung von vb, jscript, c#, CodeSnippetCompileUnit

Erzeugung beliebiger Technologien nicht möglich, PHP, SQL

Teil der .NET Framework-Klassenbibliothek

Wizard-Code nicht immer zufriedenstellend

Geringer Lernaufwand

Verbesserte Unterstützung in VS 2010