Refactoring to Design Patterns (phpDay 2009)
-
Upload
simone-carletti -
Category
Technology
-
view
2.499 -
download
0
description
Transcript of Refactoring to Design Patterns (phpDay 2009)
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