2011.02.25 code generation con i templates t4 in visual studio

1,036 views

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,036
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

2011.02.25 code generation con i templates t4 in visual studio

  1. 1. Code Generation con i templates T4in Visual Studio<br />Marco Parenzan<br />
  2. 2. A scuola ci insegnano l’incapsulamento, l’ereditarietà e il polimorfismo<br />Condividiamo:<br />In .NET, l’ereditarietà è il meccanismo in base al quale viene implementato il polimorfismo<br />Questo permette…<br />...di generalizzare l’uso…<br />…di specializzare il comportamento…<br />Se non uso l’ereditarietà in questo modo, è giusto usarla?<br />L’ereditarietà viene introdotta solo allo scopo di riutilizzare il codice?<br />L’ereditarietà per codice genera un fortissimo accoppiamento nel codice…<br />All’inizio c’era l’ereditarietà<br />
  3. 3. L’ereditarietà come riuso è un AntiPattern<br />sono problemi che si incontrano frequentemente durante lo sviluppo dei programmi e che dovrebbero essere evitati<br />http://it.wikipedia.org/wiki/Anti-pattern<br />Dove possibile usare la composizione rispetto all’ereditarietà<br />Usare il Pattern Strategy<br />Definire una famiglia di algoritmi, incapsularli e renderli intercambiabili<br />http://it.wikipedia.org/wiki/Strategy_pattern<br />Diminuire l’accoppiamento<br />Ridurre le dipendenze tra le classi del dominio<br />Usare Dependency Injection<br />Un riassunto lo trovate anche su<br />http://www.slideshare.net/klucrab/antipatterns-i-vizi-del-programmatore<br />Overuse of Inheritance<br />28/01/2011<br />3<br />
  4. 4. Patterns, Patterns, Patterns!<br />I patterns sono sempre la soluzione<br />L’unico problema ovviamente è scegliere di volta in volta quello giusto<br />Applicati Object Orientation, Strategy Pattern e Dependency Injection, quello che rimane è codice utile, che rispetta dei patterns<br />Elementi comuni (es. proprietà, naming, ecc…) che, nel rispetto dei pattern, si ripetono nella struttura<br />Questo è codice non più generalizzabile…<br />...altrimenti potrei cadere nel dynamic coding, nel late binding (es. Data Dictionary vs Properties, Reflection o Expressions Trees invece di Metodi)<br />…e perderei l’aiuto dell’Intellisense di Visual Studio<br />Perché non usare la Code Generation?<br />
  5. 5. Per applicare dei patterns<br />Per garantire uno stile<br />Per evitare di ripetersi<br />Almeno, non «by hand»<br />Per essere più veloci<br />Perchè usare la Code Generation?<br />
  6. 6. Visual Studio dipende pesantemente dalla Code Generation<br />Tutti gli editor di VS, i designer, sono dei Code Generator<br />WinForm<br />DataSet<br />WPF<br />Entity Framework<br />...<br />Ma sembra che i programmatori non se ne siano mai accorti<br />In che senso?<br />Nel senso che non si sono mai ispirati a questi Code Generator per farsene uno proprio<br />Code Generation, questa sconosciuta<br />
  7. 7. Eppure li potremmo usare in tantissimi modi<br />Dati<br />SQL<br />DAL<br />Mapping<br />Codice Generico (infrastruttura)<br />Maschere (forms)<br />Cosa Generare?<br />
  8. 8. By Hand<br />XML + XSLT<br />CodeDOM<br />CodeSmith Tools<br />http://www.codesmithtools.com/<br />NetTiers<br />http://blogs.ugidotnet.org/dsenatore/archive/2009/05/05/.nettiers-pro-e-contro.aspx<br />http://nettiers.com/<br />LLBLGen<br />http://www.llblgen.com/<br />Code Generation nella «storia»<br />
  9. 9. Brute Force<br />Codice (host) che genera codice<br />Sostanzialmente C#/VB...<br />F#/Ruby/Metaprogramming/DSL<br />Codice (ad altissimo livello) che genera codice<br />È una gran bella strada, più ardua<br />Template-Based<br />Ipotesi: devo generare un testo<br />Tutto ciò che è fisso rispetto alla generazione fa parte del testo del template e non del codice<br />Molto più manutenibile (quasi stilizzabile)<br />Approcci<br />
  10. 10. WPF, ASP.NET, EF<br />...sono Framework<br />Un file .aspx, .(cs/vb)html, .xaml, .edmx, altro non sono che templates<br />Il fatto che siano (o no) T4 è un dettaglio<br />.NET 4.0<br />
  11. 11. ...in realtà è arrivato nel 2005!<br />...ma in pochi se ne sono accorti<br />Una delle attività del gruppo VSX (ovvero Visual Studio e il suo ecosistema)<br />Framework sviluppato da Microsoft e disponibile SEMPRE in Visual Studio dalla 2005<br /><ul><li>Ma non esiste un editor (VS-like), solo testo
  12. 12. Bisogna scaricare dei plug-in</li></ul>Clarius<br /><ul><li>http://www.visualt4.com/
  13. 13. Ancora in Beta</li></ul>Tangible T4 Editor plus modeling tools for VS2010<br /><ul><li>http://t4-editor.tangible-engineering.com/
  14. 14. http://visualstudiogallery.msdn.microsoft.com/60297607-5fd4-4da4-97e1-3715e90c1a23/</li></ul>...e poi arrivò T4<br />
  15. 15. Code Generation con i Templates T4 in Visual Studio<br />Introduzione a t4<br />
  16. 16. Code Generation con i Templates T4 in Visual Studio<br />TEXTTEMPLATINGTRANSFORMATIONTOOLKIT<br />
  17. 17. È basato sui marcatori <br />È definito in termini di<br />Processing Directives<br />Text Blocks<br />Code Blocks<br />Statement Blocks<br />Expression Blocks<br />Class Features Blocks<br />T4 means «Template»<br />
  18. 18. Come funziona<br />
  19. 19. Come funziona<br />
  20. 20. Code Generation con i Templates T4 in Visual Studio<br />Casi d’uso<br />
  21. 21. Data Source<br />Trasformare dati, da un formato ad un altro<br />Da Excel…<br />…a Xml o SQL<br />…a codice C# per caricare oggetti da salvare in DataContext EF<br />Ottimo nel periodo in cui si modella i DataContext e si può ogni volta ripartire<br />Dati “tipizzati”<br />
  22. 22. Utile per l’approccio POCO<br />Utile per poter generare set di entità diverse adornate da attributi specifici<br />DataContract/DataMember (WCF)<br />DataAnnotations (EF, ASP.NET MVC)<br />Utile per creare oggetti appartenenti ad un framework (eredità da classe base)<br />Models<br />
  23. 23. Generare infrastrutture di accesso ai dati<br />OR/M<br />Implementare Patterns<br />Repository<br />ActiveRecord<br />Data Access<br />
  24. 24. Descrivere Entità o Contratti in un linguaggio ad alto livello<br />Anche un file Xml lo è<br />Bello sarebbe un testo scritto parsato con ANTLR<br />Genera codice compilato nel progetto<br />Si descrivono le metafore esplicitando i dati utili e rendendo di default ciò che non è importante<br />Domain Specific Languages<br />
  25. 25. Strumenti Traversali<br />Partial Classes<br />Ottime per aggiungere membri custom<br />Ottime per implementare interfacce<br />Partial Methods<br />Ottimi per intercettare momenti (opzionali) di get/set delle proprietà<br />Come una callback, solo tipizzata e statica (non delegati)<br />1 file per partial class<br />1 file ttn files generati<br />
  26. 26. Code Generation con i templates T4in Visual Studio<br />Conclusioni<br />Marco Parenzan<br />
  27. 27. T4 usato con soddisfazione:<br />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)<br />Ottimo supporto in fase di progettazione per poter adattare il codice quando si è in fase di prototipazione<br />Ottimo supporto in fase di manutenzione per poter “propagare” l’aggiunta di un dato in tutti i tiers (CRUD)<br />T4 usato con difficoltà:<br />L’editor free aiuta fino ad un certo punto…<br />…bisogna essere metodici nella scrittura del codice del template per non perdere il filo (apertura e chiusura dei marcatori)<br />Mai più senza<br />Conclusioni<br />
  28. 28. Futuro<br />Una toolbox fatta di templates<br />Uno “stack” di templates come da demo<br />Più formale e strutturato (LightSwitchT4 )<br />Confrontarsi con la community sull’uso della Code Generation con il M-V-VM<br />
  29. 29. Link<br />Marco Parenzan<br />http://blog.codeisvalue.com/<br />marco.parenzan@libero.it<br />http://www.codeisvalue.com/<br />http://www.slideshare.com/marco.parenzan<br />marco_parenzan<br />

×