Code Generation con i templates T4 in visual studio

  • 1,214 views
Uploaded on

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...

More in: Technology , Business
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,214
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
13
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Code Generation con i Templates T4in Visual Studio
    Marco Parenzan
  • 2. 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
  • 3. 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
  • 4. 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?
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. .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
  • 11. ...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
    • 12. Bisogna scaricare dei plug-in
    Clarius
    • http://www.visualt4.com/
    • 13. Ancora in Beta
    Tangible T4 Editor plus modeling tools for VS2010
    • http://t4-editor.tangible-engineering.com/
    • 14. http://visualstudiogallery.msdn.microsoft.com/60297607-5fd4-4da4-97e1-3715e90c1a23/
    28/01/2011
    www.xedotnet.org
    11
  • 15. Code Generation con i Templates T4 in Visual Studio
    Introduzione a t4
  • 16. Code Generation con i Templates T4 in Visual Studio
    TEXTTEMPLATINGTRANSFORMATIONTOOLKIT
  • 17. 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
  • 18. Come funziona
  • 19. Come funziona
  • 20. Code Generation con i Templates T4 in Visual Studio
    Casi d’uso
  • 21. 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”
  • 22. 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)
  • 23. Data Access
    Generare infrastrutture di accesso ai dati
    OR/M
    Implementare Patterns
    Repository
    ActiveRecord
  • 24. 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
  • 25. 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
  • 26. Code Generation con i Templates T4 in Visual Studio
    Casi d’uso
  • 27. Code Generation con i templates T4in Visual Studio
    Conclusioni
    Marco Parenzan
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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