antipatterns: i vizi del programmatore

Post on 22-Apr-2015

1.864 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

presenta :

PATTERNSI 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 da2

““

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 code8

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 autonomamentesecondo 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:

InvariantiChe cosa devo mantenere invariato?

Post-condizioni Che cosa sono in grado di garantire?

Pre-condizioniChe 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 Sychwww.olegsych.com

T4 in Action

57

Installare T4 Toolboxda 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

CreditsLe 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

top related