Code Generation con i templates T4 in visual studio
Upcoming SlideShare
Loading in...5
×
 

Code Generation con i templates T4 in visual studio

on

  • 1,573 views

Uno degli strumenti meno pubblicizzati ma più utili in Visual Studio sono i templates T4. Strumenti come l'Entity Framework e ASP.NET MVC li hanno resi (forse) più diffusi. Come sono fatti? Come si ...

Uno degli strumenti meno pubblicizzati ma più utili in Visual Studio sono i templates T4. Strumenti come l'Entity Framework e ASP.NET MVC li hanno resi (forse) più diffusi. Come sono fatti? Come si usano? Cosa ci si può fare? Una carrellata di alcuni usi interessanti, dagli oggetti POCO a WPF, passando attraverso lo "scaffolding" e i Domain Specific Languages...

Statistics

Views

Total Views
1,573
Views on SlideShare
1,572
Embed Views
1

Actions

Likes
0
Downloads
12
Comments
0

1 Embed 1

http://static.slidesharecdn.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Code Generation con i templates T4 in visual studio Code Generation con i templates T4 in visual studio Presentation Transcript

  • Code Generation con i Templates T4in Visual Studio
    Marco Parenzan
  • All’inizio c’era l’ereditarietà
    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…
    28/01/2011
    www.xedotnet.org
    2
  • Overuse of Inheritance
    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
    28/01/2011
    www.xedotnet.org
    3
    View slide
  • 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?
    View slide
  • Perchè usare la Code Generation?
    Per applicare dei patterns
    Per garantire uno stile
    Per evitare di ripetersi
    Almeno, non «by hand»
    Per essere più veloci
    28/01/2011
    www.xedotnet.org
    5
  • Code Generation, questa sconosciuta
    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
    28/01/2011
    www.xedotnet.org
    6
  • Cosa Generare?
    Eppure li potremmo usare in tantissimi modi
    Dati
    SQL
    DAL
    Mapping
    Codice Generico (infrastruttura)
    Maschere (forms)
    28/01/2011
    www.xedotnet.org
    7
  • Code Generation nella «storia»
    By Hand
    XML + XSLT
    CodeDOM
    CodeSmith Tools
    http://www.codesmithtools.com/
    Abbiamo visto netTiers nel 2009 (Venerdì 8 maggio) con Davide Senatore
    http://blogs.ugidotnet.org/dsenatore/archive/2009/05/05/.nettiers-pro-e-contro.aspx
    http://nettiers.com/
    LLBLGen
    http://www.llblgen.com/
    28/01/2011
    www.xedotnet.org
    8
  • Approcci
    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)
    28/01/2011
    www.xedotnet.org
    9
  • .NET 4.0
    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
    28/01/2011
    www.xedotnet.org
    10
  • ...e poi arrivò T4
    ...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-3715e90c1a23/
    28/01/2011
    www.xedotnet.org
    11
  • Code Generation con i Templates T4 in Visual Studio
    Introduzione a t4
  • Code Generation con i Templates T4 in Visual Studio
    TEXTTEMPLATINGTRANSFORMATIONTOOLKIT
  • T4 means «Template»
    <#@template language=“C#” #> Hello <# Write(”World!”) #>
    È basato sui marcatori
    È definito in termini di
    Processing Directives
    Text Blocks
    Code Blocks
    Expression Blocks
    Class Features Blocks
    28/01/2011
    www.xedotnet.org
    14
  • Come funziona
  • Come funziona
  • Code Generation con i Templates T4 in Visual Studio
    Casi d’uso
  • 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”
  • Models
    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)
  • Data Access
    Generare infrastrutture di accesso ai dati
    OR/M
    Implementare Patterns
    Repository
    ActiveRecord
  • Domain Specific Languages
    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
  • 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 ttn files generati
  • Code Generation con i Templates T4 in Visual Studio
    Casi d’uso
  • Code Generation con i templates T4in Visual Studio
    Conclusioni
    Marco Parenzan
  • Conclusioni
    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
    28/01/2011
    www.xedotnet.org
    25
  • 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
  • Blogs e Libri
    Libri???
    Practical Code Generation in .NETPeter Vogelhttp://www.amazon.com/Practical-Code-Generation-NET-Addison-Wesley/dp/0321606787/ref=sr_1_1?ie=UTF8&qid=1295929709&sr=8-1
    (Vecchi) Libri sulla Code Generation
    Code Generation in Microsoft .NETKathleen Dollardhttp://www.amazon.com/Code-Generation-Microsoft-Kathleen-Dollard/dp/1590591372/ref=sr_1_1?ie=UTF8&s=books&qid=1295930865&sr=1-1
    Code Generation in ActionJack Herringtonhttp://www.amazon.com/Code-Generation-Action-Jack-Herrington/dp/1930110979/ref=sr_1_2?ie=UTF8&qid=1295929709&sr=8-2
    Blogs
    Oleg Sychhttp://www.olegsych.com/
    Daniel Cazzulinohttp://weblogs.asp.net/cazzu/
    28/01/2011
    www.xedotnet.org
    27
  • Link
    www.xedotnet.org
    28
    Marco Parenzan
    http://blog.codeisvalue.com/
    marco.parenzan@libero.it
    http://www.codeisvalue.com/
    marco_parenzan
    http://www.slideshare.com/marco.parenzan