2011.02.25 code generation con i templates t4 in visual studio

26
Code Generation con i templates T4 in Visual Studio » Marco Parenzan

description

Code: http://cid-a83bbb23f3e251dc.office.live.com/self.aspx/Presentations/2011/2011.02.25%20-%20Code%20Generation%20con%20i%20templates%20T4%20in%20Visual%20Studio.zip

Transcript of 2011.02.25 code generation con i templates t4 in visual studio

Page 1: 2011.02.25   code generation con i templates t4 in visual studio

Code Generation con i templates T4in Visual Studio

» Marco Parenzan

Page 2: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

» A scuola ci insegnano l’incapsulamento, l’ereditarietà e il polimorfismo

» Condividiamo:• In .NET, l’ereditarietà è il meccanismo in base al quale viene implementato

il polimorfismo• Questo permette…

• ...di generalizzare l’uso…• …di specializzare il comportamento…

» Se non uso l’ereditarietà in questo modo, è giusto usarla?• L’ereditarietà viene introdotta solo allo scopo di riutilizzare il codice?• L’ereditarietà per codice genera un fortissimo accoppiamento nel codice…

All’inizio c’era l’ereditarietà

Page 3: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

» L’ereditarietà come riuso è un AntiPattern• sono problemi che si incontrano frequentemente durante lo sviluppo dei

programmi e che dovrebbero essere evitati• http://it.wikipedia.org/wiki/Anti-pattern

» Dove possibile usare la composizione rispetto all’ereditarietà• Usare il Pattern Strategy• Definire una famiglia di algoritmi, incapsularli e renderli intercambiabili• http://it.wikipedia.org/wiki/Strategy_pattern

» Diminuire l’accoppiamento• Ridurre le dipendenze tra le classi del dominio• Usare Dependency Injection

» Un riassunto lo trovate anche su• http://www.slideshare.net/klucrab/antipatterns-i-vizi-del-programmatore

Overuse of Inheritance

28/01/2011 3

Page 4: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

Patterns, Patterns, Patterns!» I patterns sono sempre la soluzione• L’unico problema ovviamente è scegliere di volta in volta

quello giusto» Applicati Object Orientation, Strategy Pattern e

Dependency Injection, quello che rimane è codice utile, che rispetta dei patterns• Elementi comuni (es. proprietà, naming, ecc…) che, nel

rispetto dei pattern, si ripetono nella struttura» Questo è codice non più generalizzabile…• ...altrimenti potrei cadere nel dynamic coding, nel late

binding (es. Data Dictionary vs Properties, Reflection o Expressions Trees invece di Metodi)

• …e perderei l’aiuto dell’Intellisense di Visual Studio» Perché non usare la Code Generation?

Page 5: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

» Per applicare dei patterns» Per garantire uno stile» Per evitare di ripetersi• Almeno, non «by hand»

» Per essere più veloci

Perchè usare la Code Generation?

Page 6: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

» Visual Studio dipende pesantemente dalla Code Generation» Tutti gli editor di VS, i designer, sono dei Code Generator

• WinForm• DataSet• WPF• Entity Framework• ...

» Ma sembra che i programmatori non se ne siano mai accorti• In che senso?

» Nel senso che non si sono mai ispirati a questi Code Generator per farsene uno proprio

Code Generation, questa sconosciuta

Page 7: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

» Eppure li potremmo usare in tantissimi modi• Dati• SQL• DAL• Mapping• Codice Generico (infrastruttura)• Maschere (forms)

Cosa Generare?

Page 8: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

» By Hand» XML + XSLT» CodeDOM» CodeSmith Tools• http://www.codesmithtools.com/• NetTiers

• http://blogs.ugidotnet.org/dsenatore/archive/2009/05/05/.nettiers-pro-e-contro.aspx

• http://nettiers.com/

» LLBLGen• http://www.llblgen.com/

Code Generation nella «storia»

Page 9: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

» Brute Force• Codice (host) che genera codice• Sostanzialmente C#/VB...

» F#/Ruby/Metaprogramming/DSL• Codice (ad altissimo livello) che genera codice• È una gran bella strada, più ardua

» Template-Based• Ipotesi: devo generare un testo• Tutto ciò che è fisso rispetto alla generazione fa parte del

testo del template e non del codice• Molto più manutenibile (quasi stilizzabile)

Approcci

Page 10: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

» WPF, ASP.NET, EF• ...sono Framework

» Un file .aspx, .(cs/vb)html, .xaml, .edmx, altro non sono che templates• Il fatto che siano (o no) T4 è un dettaglio

.NET 4.0

Page 11: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

» ...in realtà è arrivato nel 2005!• ...ma in pochi se ne sono accorti• Una delle attività del gruppo VSX (ovvero Visual Studio e il suo

ecosistema)» Framework sviluppato da Microsoft e disponibile SEMPRE in

Visual Studio dalla 2005» Ma non esiste un editor (VS-like), solo testo» Bisogna scaricare dei plug-in

» Clarius» http://www.visualt4.com/» Ancora in Beta

» Tangible T4 Editor plus modeling tools for VS2010» http://t4-editor.tangible-engineering.com/» http://visualstudiogallery.msdn.microsoft.com/60297607-5fd4-4da4-97e1-3715e9

0c1a23/

...e poi arrivò T4

Page 12: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

Code Generation con i Templates T4 in Visual Studio

INTRODUZIONE A T4

Page 13: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

Code Generation con i Templates T4 in Visual Studio

TEXTTEMPLATING

TRANSFORMATIONTOOLKIT

Page 14: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

» È basato sui marcatori » È definito in termini di• Processing Directives• Text Blocks• Code Blocks• Statement Blocks• Expression Blocks• Class Features Blocks

T4 means «Template»

Page 15: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

Come funziona

Page 16: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

Come funziona

Page 17: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

Code Generation con i Templates T4 in Visual Studio

CASI D’USO

Page 18: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

Data Source

» Trasformare dati, da un formato ad un altro• Da Excel…• …a Xml o SQL• …a codice C# per caricare oggetti da salvare in

DataContext EF» Ottimo nel periodo in cui si modella i

DataContext e si può ogni volta ripartire• Dati “tipizzati”

Page 19: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

» Utile per l’approccio POCO» Utile per poter generare set di entità diverse

adornate da attributi specifici• DataContract/DataMember (WCF)• DataAnnotations (EF, ASP.NET MVC)

» Utile per creare oggetti appartenenti ad un framework (eredità da classe base)

Models

Page 20: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

» Generare infrastrutture di accesso ai dati• OR/M

» Implementare Patterns• Repository• ActiveRecord

Data Access

Page 21: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

» Descrivere Entità o Contratti in un linguaggio ad alto livello• Anche un file Xml lo è• Bello sarebbe un testo scritto parsato con ANTLR• Genera codice compilato nel progetto• Si descrivono le metafore esplicitando i dati utili e

rendendo di default ciò che non è importante

Domain Specific Languages

Page 22: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

Strumenti Traversali

» Partial Classes• Ottime per aggiungere membri custom• Ottime per implementare interfacce

» Partial Methods• Ottimi per intercettare momenti (opzionali) di

get/set delle proprietà• Come una callback, solo tipizzata e statica (non

delegati)» 1 file per partial class• 1 file ttn files generati

Page 23: 2011.02.25   code generation con i templates t4 in visual studio

Code Generation con i templates T4in Visual Studio

Conclusioni

» Marco Parenzan

Page 24: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

» T4 usato con soddisfazione:• Ottimo supporto in fase di disegno dei dati per preparare dei DB di

partenza (insert dei dati da codice C#, con il generatore di codice genera le insert)

• Ottimo supporto in fase di progettazione per poter adattare il codice quando si è in fase di prototipazione

• Ottimo supporto in fase di manutenzione per poter “propagare” l’aggiunta di un dato in tutti i tiers (CRUD)

» T4 usato con difficoltà:• L’editor free aiuta fino ad un certo punto…• …bisogna essere metodici nella scrittura del codice del template per non

perdere il filo (apertura e chiusura dei marcatori)» Mai più senza

Conclusioni

Page 25: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

Futuro

» Una toolbox fatta di templates» Uno “stack” di templates come da demo• Più formale e strutturato (LightSwitchT4 )

» Confrontarsi con la community sull’uso della Code Generation con il M-V-VM

Page 26: 2011.02.25   code generation con i templates t4 in visual studio

[email protected]

Sede Legale: Via Monte Coglians, 8 – PORCIA – (PN)Codice fiscale: 91068510931

blog:

email:

web:

twitter:

slideshare:

Link

»Marco Parenzan

http://blog.codeisvalue.com/

[email protected]

http://www.codeisvalue.com/

http://www.slideshare.com/marco.parenzan

marco_parenzan