Refactoring to Design Patterns (phpDay 2009)

Preview:

DESCRIPTION

 

Citation preview

Refactoring to Design Pa0erns Simone Carle5 

phpDay 2009 – May 15‐16, 2009 – Verona, Italy h0p://grusp.it ‐ h0p://phpday.it ‐ h0p://joind.in/event/view/34 

About Me 

•  Technical Manager in Altura Labs •  Addicted to Agile Development 

•  Fallen in love with Development Best Prac=ces 

•  Passionate about Object Oriented Programming 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Designing object oriented soKware is hard, and designing reusable object‐oriented soKware is 

even harder. 

Design Pa*erns (GoF) 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

EvoluRon 

Maintainability 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Maintainability 

Long project lifecycle 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Maintainability 

Long project lifecycle 

Scalability 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Maintainability 

Long project lifecycle 

Scalability 

Flexibility 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

… and we need it for yesterday! 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Design for Changes 

The key to maximizing reuse lies in an=cipa=ng new requirements and changes to exis=ng 

requirements, and design your system so that they can evolve accordingly. 

Design Pa*erns (GoF) 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Bad Smell 

hVp://www.codinghorror.com/blog/archives/000589.html 

D.R.Y. 

Don’t repeat yourself 

K.I.S.S. 

Keep it Simple, Stupid 

Y.A.G.N.I. 

You Ain't Gonna Need It  

Over‐Engineering 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Under‐Engineering 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Refactoring 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

What is Refactoring? 

Refactoring is a disciplined technique for restructuring an exis=ng body of code, altering 

its internal structure without changing its external behavior. 

Mar2n Fowler 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Why? 

•  Improve readability •  Improve maintainability 

•  Gain a beVer understanding of code 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

How? 

•  Small steps •  Con=nuous •  Don’t add features •  … or bugs •  Have a good knowledge of the code 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Design Pa0erns 

Design PaVerns describe simple and elegant solu=ons to specific problems in object 

oriented soKware design. 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Each paVerns describes a problem which occurs over and over again in our environment, and then describes the core of the solu=on to that problem, in such a way that you can use this 

solu=on a million =mes over. 

Christopher Alexander 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Context 

Problem 

Solu=on 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

A word of warning 

Ideally when the appropriate problem comes along, you should trigger the design paVern 

and your problem is solved. 

Russ Olsen, Design Pa*erns in Ruby 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Design Pa0erns by Purpose 

•  Crea=onal PaVerns •  Structural PaVerns •  Behavioral PaVerns 

•  Concurrency PaVerns •  Architectural PaVerns 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

There is a natural rela=on  between paVerns and refactorings.  

PaVerns are where you want to be,  

refactorings are ways to get there  

from somewhere else. 

Mar2n Fowler 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

TesRng 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

TesRng 

performance 

integra=on 

func=onal 

unit 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Test Driven Development 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Tes=ng 

Refactoring 

Design PaVerns 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Refactoring to Design Pa0erns 

Observer 

Observer 

The Observer paVern defines dependency between objects so that when one object change state, all its dependents are no=fied 

and updated automa=cally 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Observer 

Post 

CacheSweeper  Logger EmailNo=fier 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Observer 

Post 

CacheSweeper  Logger EmailNo=fier 

$post‐>=tle = “foo”; $post‐>save(); 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Observer 

Post 

CacheSweeper  Logger EmailNo=fier 

$post‐>=tle = “foo”; $post‐>save(); 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Observer 

Post 

CacheSweeper  Logger EmailNo=fier 

$post‐>=tle = “foo”; $post‐>save(); 

aKer_save()  aKer_save()  aKer_save() 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Observer 

Post 

CacheSweeper  Logger EmailNo=fier 

$post‐>delete(); 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Observer 

Post 

CacheSweeper  Logger EmailNo=fier 

$post‐>delete(); 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Observer 

Post 

CacheSweeper  Logger EmailNo=fier 

aKer_delete()  aKer_delete() 

$post‐>delete(); 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Code Time 

Strategy 

Strategy 

function doSomething($even, $odd){ if ($even == "secret") { if ($odd == "other secret") { return 1; } else if ("pizza" == "good") { return "Yes it is!"; } } else if ($odd != $even) { return "yeah, they are"; } else { return "I'm getting crazy"; }} 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Strategy 

method($params){

// complex logic// conditional strategy

}

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Strategy 

Strategy 1  Strategy 2  Strategy 3 

method($params){

$s = new Strategy();$s->method($params);

}

$s = new Strategy()

$s->method($params);

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Code Time 

QuesRons? 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

License This presenta=on is published under the AVribu=on‐Share Alike Unported Crea=ve Commons License. 

You are free: 

•  to Share — to copy, distribute and transmit the work 

•  to Remix — to adapt the work 

Under the following condi=ons: 

•  A0ribuRon — You must aVribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). 

•  Share Alike — If you alter, transform, or build upon this work, you may distribute the resul=ng work only under the same, similar or a compa=ble license. 

Visit hVp://crea=vecommons.org/licenses/by‐sa/3.0/ for more details. 

phpDay 2009 – 15 e 16 Maggio  Verona, Italy 

Thank you! 

Slides will be available at www.simonecarleq.com 

www.slideshare.net/weppos 

Rate this talk at 

hVp://joind.in/talk/view/417