SlideShare a Scribd company logo
Code Generation con i Templates T4in Visual StudioMarco Parenzan
All’inizio c’era l’ereditarietàA scuola ci insegnano l’incapsulamento, l’ereditarietà e il polimorfismoCondividiamo:In .NET, l’ereditarietà è il meccanismo in base al quale viene implementato il polimorfismoQuesto 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/2011www.xedotnet.org2
Overuse of InheritanceL’ereditarietà come riuso è un AntiPatternsono problemi che si incontrano frequentemente durante lo sviluppo dei programmi e che dovrebbero essere evitatihttp://it.wikipedia.org/wiki/Anti-patternDove possibile usare la composizione rispetto all’ereditarietàUsare il Pattern StrategyDefinire  una famiglia di algoritmi, incapsularli e renderli intercambiabilihttp://it.wikipedia.org/wiki/Strategy_patternDiminuire l’accoppiamentoRidurre le dipendenze tra le classi del dominioUsare Dependency InjectionUn riassunto lo trovate anche suhttp://www.slideshare.net/klucrab/antipatterns-i-vizi-del-programmatore28/01/2011www.xedotnet.org3
Patterns, Patterns, Patterns!I patterns sono sempre la soluzioneL’unico problema ovviamente è scegliere di volta in volta quello giustoApplicati Object Orientation, Strategy Pattern e Dependency Injection, quello che rimane è codice utile, che rispetta dei patternsElementi comuni (es. proprietà, naming, ecc…) che, nel rispetto dei pattern, si ripetono nella strutturaQuesto è 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 StudioPerché non usare la Code Generation?
Perchè usare la Code Generation?Per applicare dei patternsPer garantire uno stilePer evitare di ripetersiAlmeno, non «by hand»Per essere più veloci28/01/2011www.xedotnet.org5
Code Generation, questa sconosciutaVisual Studio dipende pesantemente dalla Code GenerationTutti gli editor di VS, i designer, sono dei Code GeneratorWinFormDataSetWPFEntity Framework...Ma sembra che i programmatori non se ne siano mai accortiIn che senso?Nel senso che non si sono mai ispirati a questi Code Generator per farsene uno proprio28/01/2011www.xedotnet.org6
Cosa Generare?Eppure li potremmo usare in tantissimi modiDatiSQLDALMappingCodice Generico (infrastruttura)Maschere (forms)28/01/2011www.xedotnet.org7
Code Generation nella «storia»By HandXML + XSLTCodeDOMCodeSmith Toolshttp://www.codesmithtools.com/Abbiamo visto netTiers nel 2009 (Venerdì 8 maggio) con Davide Senatorehttp://blogs.ugidotnet.org/dsenatore/archive/2009/05/05/.nettiers-pro-e-contro.aspxhttp://nettiers.com/LLBLGenhttp://www.llblgen.com/28/01/2011www.xedotnet.org8
ApprocciBrute ForceCodice (host) che genera codiceSostanzialmente C#/VB...F#/Ruby/Metaprogramming/DSLCodice (ad altissimo livello) che genera codiceÈ una gran bella strada, più arduaTemplate-BasedIpotesi: devo generare un testoTutto ciò che è fisso rispetto alla generazione fa parte del testo del template e non del codiceMolto più manutenibile (quasi stilizzabile)28/01/2011www.xedotnet.org9
.NET 4.0WPF, ASP.NET, EF...sono FrameworkUn file .aspx, .(cs/vb)html, .xaml, .edmx, altro non sono che templatesIl fatto che siano (o no) T4 è un dettaglio28/01/2011www.xedotnet.org10
...e poi arrivò T4...in realtà è arrivato nel 2005!...ma in pochi se ne sono accortiUna delle attività del gruppo VSX (ovvero Visual Studio e il suo ecosistema)Framework sviluppato da Microsoft e disponibile SEMPRE in Visual Studio dalla 2005Ma non esiste un editor (VS-like), solo testo
Bisogna scaricare dei plug-inClariushttp://www.visualt4.com/
Ancora in BetaTangible T4 Editor plus modeling tools for VS2010http://t4-editor.tangible-engineering.com/
http://visualstudiogallery.msdn.microsoft.com/60297607-5fd4-4da4-97e1-3715e90c1a23/28/01/2011www.xedotnet.org11
Code Generation con i Templates T4 in Visual StudioIntroduzione a t4
Code Generation con i Templates T4 in Visual StudioTEXTTEMPLATINGTRANSFORMATIONTOOLKIT
T4 means «Template»<#@template language=“C#” #> Hello <# Write(”World!”) #>È basato sui marcatori È definito in termini diProcessing DirectivesText BlocksCode BlocksExpression BlocksClass Features Blocks28/01/2011www.xedotnet.org14
Come funziona
Come funziona
Code Generation con i Templates T4 in Visual StudioCasi d’uso
Data SourceTrasformare dati, da un formato ad un altroDa Excel……a Xml o SQL…a codice C# per caricare oggetti da salvare in DataContext EFOttimo nel periodo in cui si modella i DataContext e si può ogni volta ripartireDati “tipizzati”
ModelsUtile per l’approccio POCOUtile per poter generare set di entità diverse adornate da attributi specificiDataContract/DataMember (WCF)DataAnnotations (EF, ASP.NET MVC)Utile per creare oggetti appartenenti ad un framework (eredità da classe base)
Data AccessGenerare infrastrutture di accesso ai datiOR/MImplementare PatternsRepositoryActiveRecord
Domain Specific LanguagesDescrivere Entità o Contratti in un linguaggio ad alto livelloAnche un file Xml lo èBello sarebbe un testo scritto parsato con ANTLRGenera codice compilato nel progettoSi descrivono le metafore esplicitando i dati utili e rendendo di default ciò che non è importante
Strumenti TraversaliPartial ClassesOttime per aggiungere membri customOttime per implementare interfaccePartial MethodsOttimi per intercettare momenti (opzionali) di get/set delle proprietàCome una callback, solo tipizzata e statica (non delegati)1 file per partial class1 file ttn files generati
Code Generation con i Templates T4 in Visual StudioCasi d’uso
Code Generation con i templates T4in Visual StudioConclusioniMarco Parenzan
ConclusioniT4 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 prototipazioneOttimo 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ù senza28/01/2011www.xedotnet.org25

More Related Content

PDF
Android - Programmazione Avanzata
PPTX
Introduction to food & beverage service equipments,
PDF
The challenge of f&b operations [compatibility mode]
PPT
Mga sanhi ng ikalawang digmaang pandaigdig
PPTX
Presentation on F & B (Food & Beverage)
PPTX
Ikalawang digmaang-pandaigdig
PPTX
Unang digmaang pandaigdig
PPTX
Ang Epekto ng Unang Digmaang Pandaigdig
Android - Programmazione Avanzata
Introduction to food & beverage service equipments,
The challenge of f&b operations [compatibility mode]
Mga sanhi ng ikalawang digmaang pandaigdig
Presentation on F & B (Food & Beverage)
Ikalawang digmaang-pandaigdig
Unang digmaang pandaigdig
Ang Epekto ng Unang Digmaang Pandaigdig

Similar to Code Generation con i templates T4 in visual studio (20)

PPTX
Il buon programmatore - consigli pratici per una vita felice
PDF
Meetup DotNetCode A.I. Bot Framework and Azure Functions
PDF
Generazione automatica diagrammi di rete con template pptx
PPT
NEXiDA Smart User Interface flyer (italian)
PPTX
Entity Framework 7, Back To The Future!
PDF
Microsoft Fast - Overview
PPTX
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
PPTX
Lavorare con applicazioni Brownfield: il caso di 39x27.com
PPTX
Webcast - Introduzione a Visual Studio Online
PPTX
Machine learning models continuous deployment on azure using devops
PPTX
Codice di qualità con VS2010 (TDD)
PDF
Exploring VS Code
PPTX
Mobile development .net
PPTX
Silverlight in Action
PPT
Loosely Coupled Complexity - Unleash the power of your domain model
PDF
Smart api
PDF
C Net illuminated 4th Edition Arthur Gittleman
PDF
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
PPT
Alla scoperta di Zend Framework 1.8
PDF
Reportage Delphi Day 2012
Il buon programmatore - consigli pratici per una vita felice
Meetup DotNetCode A.I. Bot Framework and Azure Functions
Generazione automatica diagrammi di rete con template pptx
NEXiDA Smart User Interface flyer (italian)
Entity Framework 7, Back To The Future!
Microsoft Fast - Overview
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
Lavorare con applicazioni Brownfield: il caso di 39x27.com
Webcast - Introduzione a Visual Studio Online
Machine learning models continuous deployment on azure using devops
Codice di qualità con VS2010 (TDD)
Exploring VS Code
Mobile development .net
Silverlight in Action
Loosely Coupled Complexity - Unleash the power of your domain model
Smart api
C Net illuminated 4th Edition Arthur Gittleman
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
Alla scoperta di Zend Framework 1.8
Reportage Delphi Day 2012
Ad

More from Marco Parenzan (20)

PPTX
Azure IoT Central per lo SCADA engineer
PPTX
Azure Hybrid @ Home
PPTX
Static abstract members nelle interfacce di C# 11 e dintorni di .NET 7.pptx
PPTX
Azure Synapse Analytics for your IoT Solutions
PPTX
Power BI Streaming Data Flow e Azure IoT Central
PPTX
Power BI Streaming Data Flow e Azure IoT Central
PPTX
Power BI Streaming Data Flow e Azure IoT Central
PPTX
Developing Actors in Azure with .net
PPTX
Math with .NET for you and Azure
PPTX
Power BI data flow and Azure IoT Central
PPTX
.net for fun: write a Christmas videogame
PPTX
Building IoT infrastructure on edge with .net, Raspberry PI and ESP32 to conn...
PPTX
Anomaly Detection with Azure and .NET
PPTX
Deploy Microsoft Azure Data Solutions
PPTX
Deep Dive Time Series Anomaly Detection in Azure with dotnet
PPTX
Azure IoT Central
PPTX
Anomaly Detection with Azure and .net
PPTX
Code Generation for Azure with .net
PPTX
Running Kafka and Spark on Raspberry PI with Azure and some .net magic
PPTX
Time Series Anomaly Detection with Azure and .NETT
Azure IoT Central per lo SCADA engineer
Azure Hybrid @ Home
Static abstract members nelle interfacce di C# 11 e dintorni di .NET 7.pptx
Azure Synapse Analytics for your IoT Solutions
Power BI Streaming Data Flow e Azure IoT Central
Power BI Streaming Data Flow e Azure IoT Central
Power BI Streaming Data Flow e Azure IoT Central
Developing Actors in Azure with .net
Math with .NET for you and Azure
Power BI data flow and Azure IoT Central
.net for fun: write a Christmas videogame
Building IoT infrastructure on edge with .net, Raspberry PI and ESP32 to conn...
Anomaly Detection with Azure and .NET
Deploy Microsoft Azure Data Solutions
Deep Dive Time Series Anomaly Detection in Azure with dotnet
Azure IoT Central
Anomaly Detection with Azure and .net
Code Generation for Azure with .net
Running Kafka and Spark on Raspberry PI with Azure and some .net magic
Time Series Anomaly Detection with Azure and .NETT
Ad

Code Generation con i templates T4 in visual studio

  • 1. Code Generation con i Templates T4in Visual StudioMarco Parenzan
  • 2. All’inizio c’era l’ereditarietàA scuola ci insegnano l’incapsulamento, l’ereditarietà e il polimorfismoCondividiamo:In .NET, l’ereditarietà è il meccanismo in base al quale viene implementato il polimorfismoQuesto 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/2011www.xedotnet.org2
  • 3. Overuse of InheritanceL’ereditarietà come riuso è un AntiPatternsono problemi che si incontrano frequentemente durante lo sviluppo dei programmi e che dovrebbero essere evitatihttp://it.wikipedia.org/wiki/Anti-patternDove possibile usare la composizione rispetto all’ereditarietàUsare il Pattern StrategyDefinire una famiglia di algoritmi, incapsularli e renderli intercambiabilihttp://it.wikipedia.org/wiki/Strategy_patternDiminuire l’accoppiamentoRidurre le dipendenze tra le classi del dominioUsare Dependency InjectionUn riassunto lo trovate anche suhttp://www.slideshare.net/klucrab/antipatterns-i-vizi-del-programmatore28/01/2011www.xedotnet.org3
  • 4. Patterns, Patterns, Patterns!I patterns sono sempre la soluzioneL’unico problema ovviamente è scegliere di volta in volta quello giustoApplicati Object Orientation, Strategy Pattern e Dependency Injection, quello che rimane è codice utile, che rispetta dei patternsElementi comuni (es. proprietà, naming, ecc…) che, nel rispetto dei pattern, si ripetono nella strutturaQuesto è 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 StudioPerché non usare la Code Generation?
  • 5. Perchè usare la Code Generation?Per applicare dei patternsPer garantire uno stilePer evitare di ripetersiAlmeno, non «by hand»Per essere più veloci28/01/2011www.xedotnet.org5
  • 6. Code Generation, questa sconosciutaVisual Studio dipende pesantemente dalla Code GenerationTutti gli editor di VS, i designer, sono dei Code GeneratorWinFormDataSetWPFEntity Framework...Ma sembra che i programmatori non se ne siano mai accortiIn che senso?Nel senso che non si sono mai ispirati a questi Code Generator per farsene uno proprio28/01/2011www.xedotnet.org6
  • 7. Cosa Generare?Eppure li potremmo usare in tantissimi modiDatiSQLDALMappingCodice Generico (infrastruttura)Maschere (forms)28/01/2011www.xedotnet.org7
  • 8. Code Generation nella «storia»By HandXML + XSLTCodeDOMCodeSmith Toolshttp://www.codesmithtools.com/Abbiamo visto netTiers nel 2009 (Venerdì 8 maggio) con Davide Senatorehttp://blogs.ugidotnet.org/dsenatore/archive/2009/05/05/.nettiers-pro-e-contro.aspxhttp://nettiers.com/LLBLGenhttp://www.llblgen.com/28/01/2011www.xedotnet.org8
  • 9. ApprocciBrute ForceCodice (host) che genera codiceSostanzialmente C#/VB...F#/Ruby/Metaprogramming/DSLCodice (ad altissimo livello) che genera codiceÈ una gran bella strada, più arduaTemplate-BasedIpotesi: devo generare un testoTutto ciò che è fisso rispetto alla generazione fa parte del testo del template e non del codiceMolto più manutenibile (quasi stilizzabile)28/01/2011www.xedotnet.org9
  • 10. .NET 4.0WPF, ASP.NET, EF...sono FrameworkUn file .aspx, .(cs/vb)html, .xaml, .edmx, altro non sono che templatesIl fatto che siano (o no) T4 è un dettaglio28/01/2011www.xedotnet.org10
  • 11. ...e poi arrivò T4...in realtà è arrivato nel 2005!...ma in pochi se ne sono accortiUna delle attività del gruppo VSX (ovvero Visual Studio e il suo ecosistema)Framework sviluppato da Microsoft e disponibile SEMPRE in Visual Studio dalla 2005Ma non esiste un editor (VS-like), solo testo
  • 12. Bisogna scaricare dei plug-inClariushttp://www.visualt4.com/
  • 13. Ancora in BetaTangible T4 Editor plus modeling tools for VS2010http://t4-editor.tangible-engineering.com/
  • 15. Code Generation con i Templates T4 in Visual StudioIntroduzione a t4
  • 16. Code Generation con i Templates T4 in Visual StudioTEXTTEMPLATINGTRANSFORMATIONTOOLKIT
  • 17. T4 means «Template»<#@template language=“C#” #> Hello <# Write(”World!”) #>È basato sui marcatori È definito in termini diProcessing DirectivesText BlocksCode BlocksExpression BlocksClass Features Blocks28/01/2011www.xedotnet.org14
  • 20. Code Generation con i Templates T4 in Visual StudioCasi d’uso
  • 21. Data SourceTrasformare dati, da un formato ad un altroDa Excel……a Xml o SQL…a codice C# per caricare oggetti da salvare in DataContext EFOttimo nel periodo in cui si modella i DataContext e si può ogni volta ripartireDati “tipizzati”
  • 22. ModelsUtile per l’approccio POCOUtile per poter generare set di entità diverse adornate da attributi specificiDataContract/DataMember (WCF)DataAnnotations (EF, ASP.NET MVC)Utile per creare oggetti appartenenti ad un framework (eredità da classe base)
  • 23. Data AccessGenerare infrastrutture di accesso ai datiOR/MImplementare PatternsRepositoryActiveRecord
  • 24. Domain Specific LanguagesDescrivere Entità o Contratti in un linguaggio ad alto livelloAnche un file Xml lo èBello sarebbe un testo scritto parsato con ANTLRGenera codice compilato nel progettoSi descrivono le metafore esplicitando i dati utili e rendendo di default ciò che non è importante
  • 25. Strumenti TraversaliPartial ClassesOttime per aggiungere membri customOttime per implementare interfaccePartial MethodsOttimi per intercettare momenti (opzionali) di get/set delle proprietàCome una callback, solo tipizzata e statica (non delegati)1 file per partial class1 file ttn files generati
  • 26. Code Generation con i Templates T4 in Visual StudioCasi d’uso
  • 27. Code Generation con i templates T4in Visual StudioConclusioniMarco Parenzan
  • 28. ConclusioniT4 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 prototipazioneOttimo 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ù senza28/01/2011www.xedotnet.org25
  • 29. FuturoUna toolbox fatta di templatesUno “stack” di templates come da demoPiù formale e strutturato (LightSwitchT4 )Confrontarsi con la community sull’uso della Code Generation con il M-V-VM
  • 30. Blogs e LibriLibri???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 GenerationCode 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-1Code Generation in ActionJack Herringtonhttp://www.amazon.com/Code-Generation-Action-Jack-Herrington/dp/1930110979/ref=sr_1_2?ie=UTF8&qid=1295929709&sr=8-2BlogsOleg Sychhttp://www.olegsych.com/Daniel Cazzulinohttp://weblogs.asp.net/cazzu/28/01/2011www.xedotnet.org27