1. presenta :
PATTERNS
I vizi del programmatore
Speaker : Manuel Scapolan
1 0nn va
ANTI
Pordenone ,
26 Novembre 2010
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
“
“
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
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
28. IoC - Inversion of Control
28
OrderController
OrderRepository
OrderController
OrderRepository
IOrderRepository
(inversione delle dipendenze)
astrazione
una delle possibili
implementazioni
separazione dei livelli
30. Dependency Injection
30
Posso ottenere l’IoC
“iniettando” le dipendenze:
• tramite il costruttore (constructor injection)
• tramite le proprietà (setter injection)
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
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.
“
“
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]
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
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
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
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. 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
63. Invece
63
Devo pensare ad ottimizzare
il codice solo dopo aver
definito correttamente il
design dell’applicazione
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. 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.
“ “