SlideShare ist ein Scribd-Unternehmen logo
1 von 76
Downloaden Sie, um offline zu lesen
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 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
“
“
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 & Paste programming
#6 - Premature Optimization
#7 - …?
#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. Strategy lets teìhe algorithm vary independently
from clients that use it.
“
“
Pattern Strategy
GoF
#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 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
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 delle dipendenze)
astrazione
una delle possibili
implementazioni
separazione dei livelli
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)
• tramite le proprietà (setter injection)
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
Auto-Wiring
32
L’injector riconosce i servizi richiesti
dal client e li collega autonomamente
secondo la configurazione impostata
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.
“
“
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 componiamo le
parti del sistema
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 your application to
locate and load available extensions.
.
“ “
[ImportMany]
#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 cosa devo mantenere
invariato?
Post-condizioni Che cosa sono in grado di
garantire?
Pre-condizioni Che cosa mi aspetto di
ricevere?
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
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 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
Soluzione
55
Code
Generation!
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
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
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 performance di un
codice scritto pensando
al design, non viceversa!
“
“
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.
“ “
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/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
Thank You! MANUEL SCAPOLAN
website: www.manuelscapolan.it
twitter: manuelscapolan
e-mail: info@manuelscapolan.it
76

Weitere ähnliche Inhalte

Was ist angesagt?

Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP Way
Luca Milan
 
Dot netcampus2015 green-template
Dot netcampus2015 green-templateDot netcampus2015 green-template
Dot netcampus2015 green-template
DotNetCampus
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-max
DotNetCampus
 

Was ist angesagt? (20)

Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP Way
 
Async/Await: make it simple!!
Async/Await: make it simple!!Async/Await: make it simple!!
Async/Await: make it simple!!
 
Dot netcampus2015 green-template
Dot netcampus2015 green-templateDot netcampus2015 green-template
Dot netcampus2015 green-template
 
Soluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie MicrosoftSoluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie Microsoft
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-max
 
Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3
 
Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)
 
jQuery
jQueryjQuery
jQuery
 
Windows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppoWindows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppo
 
70-485: ADVANCED OF DEVELOPING WINDOWS STORE APPS USING C#
70-485: ADVANCED OF DEVELOPING WINDOWS STORE APPS USING C#70-485: ADVANCED OF DEVELOPING WINDOWS STORE APPS USING C#
70-485: ADVANCED OF DEVELOPING WINDOWS STORE APPS USING C#
 
Wcf data services
Wcf data servicesWcf data services
Wcf data services
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPC
 
Actions on Google e Alexa skills per .NET lovers
Actions on Google e Alexa skills per .NET loversActions on Google e Alexa skills per .NET lovers
Actions on Google e Alexa skills per .NET lovers
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuro
 
Akka.net & Actor Model
Akka.net & Actor ModelAkka.net & Actor Model
Akka.net & Actor Model
 
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
 
Async: scalabilità e responsiveness senza pari! @ CDays
Async: scalabilità e responsiveness senza pari! @ CDaysAsync: scalabilità e responsiveness senza pari! @ CDays
Async: scalabilità e responsiveness senza pari! @ CDays
 
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache CordovaMulti-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
 

Andere mochten auch

Object-oriented Programming-with C#
Object-oriented Programming-with C#Object-oriented Programming-with C#
Object-oriented Programming-with C#
Doncho Minkov
 

Andere mochten auch (18)

NOSQL
NOSQLNOSQL
NOSQL
 
Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!
 
TFS and Scrum - Lessons Learned
TFS and Scrum - Lessons LearnedTFS and Scrum - Lessons Learned
TFS and Scrum - Lessons Learned
 
Knockout.js
Knockout.jsKnockout.js
Knockout.js
 
Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernate
 
Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Dai delegati a LINQ con C#
Dai delegati a LINQ con C#
 
C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class Library
 
JavaScript Object Oriented
JavaScript Object OrientedJavaScript Object Oriented
JavaScript Object Oriented
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Stai guardando i dati sbagliati
Stai guardando i dati sbagliatiStai guardando i dati sbagliati
Stai guardando i dati sbagliati
 
Costruire l'identità digitale con il piano editoriale
Costruire l'identità digitale con il piano editorialeCostruire l'identità digitale con il piano editoriale
Costruire l'identità digitale con il piano editoriale
 
Liberate il kraken
Liberate il krakenLiberate il kraken
Liberate il kraken
 
OOP with C#
OOP with C#OOP with C#
OOP with C#
 
HTML e CSS
HTML e CSSHTML e CSS
HTML e CSS
 
Inbox Zero: How to Become an Email Ninja
Inbox Zero: How to Become an Email NinjaInbox Zero: How to Become an Email Ninja
Inbox Zero: How to Become an Email Ninja
 
Object-oriented Programming-with C#
Object-oriented Programming-with C#Object-oriented Programming-with C#
Object-oriented Programming-with C#
 
Transactions redefined
Transactions redefinedTransactions redefined
Transactions redefined
 
Inbox Zero: Action-Based Email
Inbox Zero: Action-Based EmailInbox Zero: Action-Based Email
Inbox Zero: Action-Based Email
 

Ähnlich wie AntiPatterns: i vizi del programmatore

Agile requirements - alla ricerca del filo rosso (iad 2013)
Agile requirements - alla ricerca del filo rosso (iad 2013)Agile requirements - alla ricerca del filo rosso (iad 2013)
Agile requirements - alla ricerca del filo rosso (iad 2013)
Fabio Armani
 

Ähnlich wie AntiPatterns: i vizi del programmatore (20)

Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality Code
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ Code
 
Kotlin hexagonal-architecture
Kotlin hexagonal-architectureKotlin hexagonal-architecture
Kotlin hexagonal-architecture
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastruttura
 
Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?
 
Il computer dice no!
Il computer dice no!Il computer dice no!
Il computer dice no!
 
Total Testing in DevOps
Total Testing in DevOpsTotal Testing in DevOps
Total Testing in DevOps
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angular
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
 
Errori fantastici... e dove trovarli
Errori fantastici... e dove trovarliErrori fantastici... e dove trovarli
Errori fantastici... e dove trovarli
 
Dynamic Language Programming For The Statically Typed Programmer
Dynamic Language Programming For The Statically Typed ProgrammerDynamic Language Programming For The Statically Typed Programmer
Dynamic Language Programming For The Statically Typed Programmer
 
Software Testing & Test Driven Development
Software Testing & Test Driven DevelopmentSoftware Testing & Test Driven Development
Software Testing & Test Driven Development
 
Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)
 
Una fugace occhiata al Test Driven Development (2006)
Una fugace occhiata al Test Driven Development  (2006)Una fugace occhiata al Test Driven Development  (2006)
Una fugace occhiata al Test Driven Development (2006)
 
Test Driven Development @ Xe.Net
Test Driven Development @ Xe.NetTest Driven Development @ Xe.Net
Test Driven Development @ Xe.Net
 
Agile requirements - alla ricerca del filo rosso (iad 2013)
Agile requirements - alla ricerca del filo rosso (iad 2013)Agile requirements - alla ricerca del filo rosso (iad 2013)
Agile requirements - alla ricerca del filo rosso (iad 2013)
 
Software Testing e TDD
Software Testing e TDDSoftware Testing e TDD
Software Testing e TDD
 
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
 
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
 
Layered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSLayered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRS
 

AntiPatterns: i vizi del programmatore