presenta :
PATTERNS
I vizi del programmatore
Speaker : Manuel Scapolan
1 0nn va
ANTI
Pordenone ,
26 Novembre 2010
ANTI-PATTERN
Definizione:
Un anti-pattern è una frequente, ma in
gran parte inefficace soluzione ad un
problema … descrive...
ANTI-PATTERN
Definizione:
3
Ripeto sempre gli
stessi ERRORI
COSA FARE?
Quando il codice “puzza” come un paio
di scarpe …
4
5
ANTI-PATTERN
Soluzione:
6
ANTI-PATTERN
menù
7
#1 - Spaghetti code
#2 - Overuse of Inheritance
#3 - Excessive Coupling
#4 - Blind Faith
#5 - Copy & P...
#1 - Spaghetti code 8
Problema
9
Soluzione
10
if … else if … o switch
11
“
“
codice client
Replace Conditional
with Polymorphism
12
classe base
classi derivate
codice client
Refactoring :
Risultato
13
#2 - Overuse of Inheritance
(“Sovraccarico” dell’ereditarietà) 14
Problema
15
Soluzione
16
Dove possibile devo sempre
preferire la composizione
all’ereditarietà
17
Phone
LandLine
Mobile
Ereditarietà
OldLandLine
18
Phone
LandLine Mobile
Composizione
SMSBehavior
ISendBehavior
MMSBehavior
ISendBehavior
19
In pratica ho applicato il …
Define a family of alghoritms, encapsulate each one, and make them
interchangeable. Strate...
#3 - Excessive Coupling
(alto accoppiamento) 20
Problema
21
Significa che …
22
ho creato una catena
di dipendenze che
lega le mie classi
attraverso una loro
implementazione
Risultato
23
Legge di Demeter
24
For all classes C, and for all methods M attached to C, all
objects to which M sends a message must be...
Obiettivo
25
Ridurre le dipendenze tra le
classi del dominio
Program to interfaces,
not to implementations!“
Cosa sbaglio?
26
L’OrderController è dipendente
dall’implementazione OrderRepository
Creare un oggetto?
27
new
IoC - Inversion of Control
28
OrderController
OrderRepository
OrderController
OrderRepository
IOrderRepository
(inversione...
Principio di Hollywood
29
“Non chiamarci tu, ti chiamiamo noi!”
Dependency Injection
30
Posso ottenere l’IoC
“iniettando” le dipendenze:
• tramite il costruttore (constructor injection)
...
StructureMap
31
http://structuremap.net/structuremap/index.html
StructureMap is a Dependency Injection / Inversion of Cont...
Auto-Wiring
32
L’injector riconosce i servizi richiesti
dal client e li collega autonomamente
secondo la configurazione im...
Managed Extensibility
Framework (MEF)
33
Plugin
SDK (Standard)
Application
The Managed Extensibility Framework (or MEF for...
Plug-In Pattern
34
Definisce la possibilità di estendere le funzionalità
di una applicazione senza doverla modificare
How does MEF work?
35
MEF in Action
36
Definiamo il servizio fornito
dall’applicazione
Con [Import] specifichiamo il punto di
estensione
1
2
MEF in Action
37
Definiamo un plug-in che implementi il
servizio e lo decoriamo con [Export]
3
MEF in Action
38
4 Configuriamo MEF:
• Definiamo un catalogo (dove trovo i plugin?)
• Defininiamo un container e componiam...
MEF in Action
39
5 Non ci resta che provare l’applicazione:
MEF in Action
dynamic loading
40
Plugin
MEFApplication
Plugin
Plugin
Plugin
MEF offers a set of discovery approaches for y...
#4 - Blind Faith
(fede cieca) 41
Problema
42
o speriamo sempre che vada
tutto bene?
Problema
43
Soluzioni
44
Design by Contract
45
Una classe garantisce un servizio nel
rispetto di un contratto definito
attraverso:
Invarianti
Che c...
46
Code Contracts provide a language-agnostic way to express
coding assumptions in .NET programs. The contracts take the f...
Code Contracts in Action
47
1 Pre-condizioni:
2 Post-condizioni:
Code Contracts in Action
48
3 Invarianti:
#5 - Copy&Paste Programming
(Programmazione copia&incolla) 49
Problema
50
Order
TakeAwayOrder EatNowOrder
CodeSmell : Duplicated Code
51
Refactoring : Form Template Method
52
Order
TakeAwayOrder EatNowOrder
Altri Refactoring
53
Extract Method
Extract Class
Pull Up Method
Incapsulare in un metodo
le istruzioni che possono
essere...
54
Soluzione
55
Code
Generation!
T4
(Text Template Transformation Toolkit)
56
T4 is a template-based code generation engine. You can
use T4 templates to ge...
T4 in Action
57
Installare T4 Toolbox
da http://t4toolbox.codeplex.com/
Definire il template, un mix di:2
• Direttive
(es....
T4 in Action
58
Direttive
Codice
testuale
Marcatori
segnaposto
+
Codice
sorgente
T4 in Action
59
Eseguire Run Custom Tool da menu:3
T4 in Action
60
Verificare il risultato:4
#6 - Premature Optimization
(Ottimizzazione prematura) 61
A volte
62
Ottimizzo il codice prima di
aver finito con il design
dell’applicazione …
Invece
63
Devo pensare ad ottimizzare
il codice solo dopo aver
definito correttamente il
design dell’applicazione
Performance
64
Applicare i principi della
programmazione ad oggetti
Velocità
(performance) Posso sempre migliorare
le perf...
Task Parallel Library
65
Qualcosa però posso farlo da subito con la …
Quando si utilizza TPL, è possibile ottimizzare le p...
A “velocità normale” …
66
… ho un semplice foreach
Diapositiva lasciata intenzionalmente bianca
67
Alla fine però il vero
problema forse è …
68
#7 - Be a programmer …
(Fare il programmatore) 69
70
… costantemente sotto
pressione
71
Consoliamoci ci sono
lavori peggiori …
72
73
74
Slide 4 : http://www.flickr.com/photos/71477195@N00/262288685/
Slide 5 : http://www.flickr.com/photos/94214577@N00/4065926...
Thank You! MANUEL SCAPOLAN
website: www.manuelscapolan.it
twitter: manuelscapolan
e-mail: info@manuelscapolan.it
76
Upcoming SlideShare
Loading in …5
×

AntiPatterns: i vizi del programmatore

1,949 views
1,902 views

Published on

Scopriamo come migliorare il nostro codice con le ultime novità dal mondo .NET: MEF, Code Contracts, T4, Task Parallel Library e molto altro ancora.

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

No Downloads
Views
Total views
1,949
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
52
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

AntiPatterns: i vizi del programmatore

  1. 1. presenta : PATTERNS I vizi del programmatore Speaker : Manuel Scapolan 1 0nn va ANTI Pordenone , 26 Novembre 2010
  2. 2. ANTI-PATTERN Definizione: Un anti-pattern è una frequente, ma in gran parte inefficace soluzione ad un problema … descrive il modo in cui da un problema si ottiene una “cattiva“ soluzione … con l'aggiunta di ulteriori difficoltà a quelle che in origine esistevano, un anti-pattern può lasciare in una situazione peggiore rispetto a quella di partenza. tradotto con google translate da 2 “ “
  3. 3. ANTI-PATTERN Definizione: 3 Ripeto sempre gli stessi ERRORI
  4. 4. COSA FARE? Quando il codice “puzza” come un paio di scarpe … 4
  5. 5. 5
  6. 6. ANTI-PATTERN Soluzione: 6
  7. 7. ANTI-PATTERN menù 7 #1 - Spaghetti code #2 - Overuse of Inheritance #3 - Excessive Coupling #4 - Blind Faith #5 - Copy & Paste programming #6 - Premature Optimization #7 - …?
  8. 8. #1 - Spaghetti code 8
  9. 9. Problema 9
  10. 10. Soluzione 10
  11. 11. if … else if … o switch 11 “ “ codice client
  12. 12. Replace Conditional with Polymorphism 12 classe base classi derivate codice client Refactoring :
  13. 13. Risultato 13
  14. 14. #2 - Overuse of Inheritance (“Sovraccarico” dell’ereditarietà) 14
  15. 15. Problema 15
  16. 16. Soluzione 16 Dove possibile devo sempre preferire la composizione all’ereditarietà
  17. 17. 17 Phone LandLine Mobile Ereditarietà OldLandLine
  18. 18. 18 Phone LandLine Mobile Composizione SMSBehavior ISendBehavior MMSBehavior ISendBehavior
  19. 19. 19 In pratica ho applicato il … Define a family of alghoritms, encapsulate each one, and make them interchangeable. Strategy lets teìhe algorithm vary independently from clients that use it. “ “ Pattern Strategy GoF
  20. 20. #3 - Excessive Coupling (alto accoppiamento) 20
  21. 21. Problema 21
  22. 22. Significa che … 22 ho creato una catena di dipendenze che lega le mie classi attraverso una loro implementazione
  23. 23. Risultato 23
  24. 24. Legge di Demeter 24 For all classes C, and for all methods M attached to C, all objects to which M sends a message must be instances of classes associated with the following classes: 1, The argument classes of M (including C). 2. The instance variable classes of C. (Objects created by M, or by functions or methods which M calls, and objects in global variables are considered as arguments of M). “ “ Bisogna solo applicare correttamente l’incapsulamento! http://www.ccs.neu.edu/research/demeter/papers/law-of-demeter/oopsla88-law-of-demeter.pdf
  25. 25. Obiettivo 25 Ridurre le dipendenze tra le classi del dominio Program to interfaces, not to implementations!“
  26. 26. Cosa sbaglio? 26 L’OrderController è dipendente dall’implementazione OrderRepository
  27. 27. Creare un oggetto? 27 new
  28. 28. IoC - Inversion of Control 28 OrderController OrderRepository OrderController OrderRepository IOrderRepository (inversione delle dipendenze) astrazione una delle possibili implementazioni separazione dei livelli
  29. 29. Principio di Hollywood 29 “Non chiamarci tu, ti chiamiamo noi!”
  30. 30. Dependency Injection 30 Posso ottenere l’IoC “iniettando” le dipendenze: • tramite il costruttore (constructor injection) • tramite le proprietà (setter injection)
  31. 31. StructureMap 31 http://structuremap.net/structuremap/index.html StructureMap is a Dependency Injection / Inversion of Control tool. It can enable looser coupling between classes and their dependencies, improve the testability of a class structure, and provide generic flexibility mechanisms. Used judiciously, StructureMap can greatly enhance the opportunities for code reuse by minimizing direct coupling between classes and configuration mechanisms. “ “ Global.Asax Service Locator
  32. 32. Auto-Wiring 32 L’injector riconosce i servizi richiesti dal client e li collega autonomamente secondo la configurazione impostata
  33. 33. Managed Extensibility Framework (MEF) 33 Plugin SDK (Standard) Application The Managed Extensibility Framework (or MEF for short) simplifies the creation of extensible applications. MEF offers discovery and composition capabilities that you can leverage to load application extensions. “ “
  34. 34. Plug-In Pattern 34 Definisce la possibilità di estendere le funzionalità di una applicazione senza doverla modificare
  35. 35. How does MEF work? 35
  36. 36. MEF in Action 36 Definiamo il servizio fornito dall’applicazione Con [Import] specifichiamo il punto di estensione 1 2
  37. 37. MEF in Action 37 Definiamo un plug-in che implementi il servizio e lo decoriamo con [Export] 3
  38. 38. MEF in Action 38 4 Configuriamo MEF: • Definiamo un catalogo (dove trovo i plugin?) • Defininiamo un container e componiamo le parti del sistema
  39. 39. MEF in Action 39 5 Non ci resta che provare l’applicazione:
  40. 40. MEF in Action dynamic loading 40 Plugin MEFApplication Plugin Plugin Plugin MEF offers a set of discovery approaches for your application to locate and load available extensions. . “ “ [ImportMany]
  41. 41. #4 - Blind Faith (fede cieca) 41
  42. 42. Problema 42 o speriamo sempre che vada tutto bene?
  43. 43. Problema 43
  44. 44. Soluzioni 44
  45. 45. Design by Contract 45 Una classe garantisce un servizio nel rispetto di un contratto definito attraverso: Invarianti Che cosa devo mantenere invariato? Post-condizioni Che cosa sono in grado di garantire? Pre-condizioni Che cosa mi aspetto di ricevere?
  46. 46. 46 Code Contracts provide a language-agnostic way to express coding assumptions in .NET programs. The contracts take the form of pre-conditions, post-conditions, and object invariants. Contracts act as checked documentation of your external and internal APIs. The contracts are used to improve testing via runtime checking, enable static contract verification, and documentation generation. “ “ DbC by Microsoft
  47. 47. Code Contracts in Action 47 1 Pre-condizioni: 2 Post-condizioni:
  48. 48. Code Contracts in Action 48 3 Invarianti:
  49. 49. #5 - Copy&Paste Programming (Programmazione copia&incolla) 49
  50. 50. Problema 50
  51. 51. Order TakeAwayOrder EatNowOrder CodeSmell : Duplicated Code 51
  52. 52. Refactoring : Form Template Method 52 Order TakeAwayOrder EatNowOrder
  53. 53. Altri Refactoring 53 Extract Method Extract Class Pull Up Method Incapsulare in un metodo le istruzioni che possono essere raggruppate logicamente Muovere in un metodo della classe base le istruzioni comuni alle derivate Incapsulare in una classe campi e metodi che possono rappresentare un concetto comune
  54. 54. 54
  55. 55. Soluzione 55 Code Generation!
  56. 56. T4 (Text Template Transformation Toolkit) 56 T4 is a template-based code generation engine. You can use T4 templates to generate Visual Basic, C#, T-SQL, XML or any other text files. “ “ Oleg Sych www.olegsych.com
  57. 57. T4 in Action 57 Installare T4 Toolbox da http://t4toolbox.codeplex.com/ Definire il template, un mix di:2 • Direttive (es. il tipo di file da generare) • Codice testuale (viene riportato tale e quale nel file di output) • Codice sorgente (serve a rendere dinamiche le parti generate) Installare T4 Editor (per l’intellisense) da http://t4-editor.tangible-engineering.com 1
  58. 58. T4 in Action 58 Direttive Codice testuale Marcatori segnaposto + Codice sorgente
  59. 59. T4 in Action 59 Eseguire Run Custom Tool da menu:3
  60. 60. T4 in Action 60 Verificare il risultato:4
  61. 61. #6 - Premature Optimization (Ottimizzazione prematura) 61
  62. 62. A volte 62 Ottimizzo il codice prima di aver finito con il design dell’applicazione …
  63. 63. Invece 63 Devo pensare ad ottimizzare il codice solo dopo aver definito correttamente il design dell’applicazione
  64. 64. Performance 64 Applicare i principi della programmazione ad oggetti Velocità (performance) Posso sempre migliorare le performance di un codice scritto pensando al design, non viceversa! “ “
  65. 65. Task Parallel Library 65 Qualcosa però posso farlo da subito con la … Quando si utilizza TPL, è possibile ottimizzare le prestazioni del codice concentrandosi sulle operazioni per cui il programma è stato progettato. “ “
  66. 66. A “velocità normale” … 66 … ho un semplice foreach
  67. 67. Diapositiva lasciata intenzionalmente bianca 67
  68. 68. Alla fine però il vero problema forse è … 68
  69. 69. #7 - Be a programmer … (Fare il programmatore) 69
  70. 70. 70 … costantemente sotto pressione
  71. 71. 71
  72. 72. Consoliamoci ci sono lavori peggiori … 72
  73. 73. 73
  74. 74. 74
  75. 75. Slide 4 : http://www.flickr.com/photos/71477195@N00/262288685/ Slide 5 : http://www.flickr.com/photos/94214577@N00/4065926258/ Slide 8 : http://www.flickr.com/photos/zitona/4147791422/ Slide 14 : http://www.flickr.com/photos/11058550@N00/876197487/ Slide 20 : http://www.flickr.com/photos/67681928@N00/2428552288/ Slide 21 : http://www.flickr.com/photos/22911005@N06/3015796994/ Slide 22 : http://www.flickr.com/photos/49503002894@N01/23781529/ Slide 29 : http://www.flickr.com/photos/46026252@N00/450642954/ Slide 41 : l’accoltellatore è di mark holthusen Slide 49 : http://www.flickr.com/photos/terrypaton/4558724856/ Slide 50 : http://www.flickr.com/photos/50717535@N00/3601448310/ Slide 54 : http://www.flickr.com/photos/78364563@N00/13553883/ Slide 61 : http://www.flickr.com/photos/45928872@N08/4256936358/ Slide 64 : http://www.flickr.com/photos/8663326@N06/4133411028/ Slide 69 : http://www.flickr.com/photos/51035608580@N01/214854623 Slide 70 : http://crazy-picsblog.blogspot.com/2010/01/15-of-worlds-crazy-and-strange-jobs.html Slide 71 : http://www.funny-city.com Slide 73 : http://www.nuffy.net/misc/pics/worlds-worst-jobs-in-pics.html Slide 74 : http://crazy-picsblog.blogspot.com/2010/01/15-of-worlds-crazy-and-strange-jobs.html Credits Le immagini contenute in questa presentazione hanno licenza Creative Commons 75
  76. 76. Thank You! MANUEL SCAPOLAN website: www.manuelscapolan.it twitter: manuelscapolan e-mail: info@manuelscapolan.it 76

×