Refactoring to Design Pa0erns 
                  Simone Carle5 




 phpDay 2009 – May 15‐16, 2009 – Verona, Italy 
  h0p:...
About Me 
•    Technical Manager in Altura Labs 
•    Addicted to Agile Development 
•    Fallen in love with Development ...
Designing object oriented soKware is hard, and 
   designing reusable object‐oriented soKware is 
                    even...
EvoluRon 
Maintainability 




phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
Maintainability 

                                    Long project lifecycle 




phpDay 2009 – 15 e 16 Maggio  Verona, It...
Maintainability 

                                    Long project lifecycle 

                                           ...
Maintainability 

                                    Long project lifecycle 

                                           ...
… 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 
   r...
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, alt...
Why? 
•  Improve readability 
•  Improve maintainability 
•  Gain a beVer understanding of code 




phpDay 2009 – 15 e 16...
How? 
•    Small steps 
•    Con=nuous 
•    Don’t add features 
•    … or bugs 
•    Have a good knowledge of the code 

...
Design Pa0erns 
Design PaVerns describe simple and elegant 
         solu=ons to specific problems in object 
               oriented soKwa...
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...
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 
  ...
Design Pa0erns by Purpose 
•  Crea=onal PaVerns 
•  Structural PaVerns 
•  Behavioral PaVerns 

•  Concurrency PaVerns 
• ...
There is a natural rela=on  
                 between paVerns and refactorings.  
                 PaVerns are where you w...
TesRng 
phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
TesRng 

                                                performance 



                                                i...
Test Driven Development 




phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
Design 
                                                      Tes=ng 
                                       PaVerns 



 ...
Refactoring to Design Pa0erns 
Observer 
Observer 


        The Observer paVern defines dependency 
         between objects so that when one object 
        chang...
Observer 

                                                   Post 




      CacheSweeper                              Em...
Observer 
 $post‐>=tle = “foo”; 
                                                   Post 
 $post‐>save(); 




      Cache...
Observer 
 $post‐>=tle = “foo”; 
                                                   Post 
 $post‐>save(); 




      Cache...
Observer 
 $post‐>=tle = “foo”; 
                                                       Post 
 $post‐>save(); 




      C...
Observer 

 $post‐>delete();                                  Post 




      CacheSweeper                              Em...
Observer 

 $post‐>delete();                                  Post 




      CacheSweeper                              Em...
Observer 

 $post‐>delete();                                  Post 




      CacheSweeper                              Em...
Code Time 
Strategy 
Strategy 
                          function doSomething($even, $odd)	
                          {	
                      ...
Strategy 
                               method($params)	
                               {	
                              ...
Strategy 
                               method($params)	
                               {	
                              ...
Code Time 
QuesRons? 




phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
License 
                      This presenta=on is published under the AVribu=on‐Share Alike Unported 
                   ...
Thank you! 

                Slides will be available at 
                www.simonecarleq.com 
              www.slidesha...
Refactoring to Design Patterns (phpDay 2009)
Upcoming SlideShare
Loading in...5
×

Refactoring to Design Patterns (phpDay 2009)

1,248

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,248
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
34
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Refactoring to Design Patterns (phpDay 2009)

  1. 1. 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 
  2. 2. 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 
  3. 3. 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 
  4. 4. EvoluRon 
  5. 5. Maintainability  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  6. 6. Maintainability  Long project lifecycle  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  7. 7. Maintainability  Long project lifecycle  Scalability  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  8. 8. Maintainability  Long project lifecycle  Scalability  Flexibility  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  9. 9. … and we need it for yesterday!  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  10. 10. 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 
  11. 11. Bad Smell  hVp://www.codinghorror.com/blog/ archives/000589.html 
  12. 12. D.R.Y.  Don’t repeat yourself 
  13. 13. K.I.S.S.  Keep it Simple, Stupid 
  14. 14. Y.A.G.N.I.  You Ain't Gonna Need It  
  15. 15. Over‐Engineering  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  16. 16. Under‐Engineering  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  17. 17. Refactoring 
  18. 18. phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  19. 19. 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 
  20. 20. Why?  •  Improve readability  •  Improve maintainability  •  Gain a beVer understanding of code  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  21. 21. 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 
  22. 22. Design Pa0erns 
  23. 23. Design PaVerns describe simple and elegant  solu=ons to specific problems in object  oriented soKware design.  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  24. 24. phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  25. 25. 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 
  26. 26. Context  Problem  Solu=on  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  27. 27. 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 
  28. 28. Design Pa0erns by Purpose  •  Crea=onal PaVerns  •  Structural PaVerns  •  Behavioral PaVerns  •  Concurrency PaVerns  •  Architectural PaVerns  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  29. 29. 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 
  30. 30. TesRng 
  31. 31. phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  32. 32. TesRng  performance  integra=on  func=onal  unit  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  33. 33. Test Driven Development  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  34. 34. Design  Tes=ng  PaVerns  Refactoring  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  35. 35. Refactoring to Design Pa0erns 
  36. 36. Observer 
  37. 37. 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 
  38. 38. Observer  Post  CacheSweeper  EmailNo=fier  Logger  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  39. 39. Observer  $post‐>=tle = “foo”;  Post  $post‐>save();  CacheSweeper  EmailNo=fier  Logger  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  40. 40. Observer  $post‐>=tle = “foo”;  Post  $post‐>save();  CacheSweeper  EmailNo=fier  Logger  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  41. 41. Observer  $post‐>=tle = “foo”;  Post  $post‐>save();  CacheSweeper  EmailNo=fier  Logger  aKer_save()  aKer_save()  aKer_save()  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  42. 42. Observer  $post‐>delete();  Post  CacheSweeper  EmailNo=fier  Logger  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  43. 43. Observer  $post‐>delete();  Post  CacheSweeper  EmailNo=fier  Logger  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  44. 44. Observer  $post‐>delete();  Post  CacheSweeper  EmailNo=fier  Logger  aKer_delete()  aKer_delete()  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  45. 45. Code Time 
  46. 46. Strategy 
  47. 47. Strategy  function doSomething($even, $odd) { if ($even == quot;secretquot;) { if ($odd == quot;other secretquot;) { return 1; } else if (quot;pizzaquot; == quot;goodquot;) { return quot;Yes it is!quot;; } } else if ($odd != $even) { return quot;yeah, they arequot;; } else { return quot;I'm getting crazyquot;; } }  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  48. 48. Strategy  method($params) { // complex logic // conditional strategy } phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  49. 49. Strategy  method($params) { $s = new Strategy(); $s->method($params); } $s = new Strategy() Strategy 1  Strategy 2  Strategy 3  $s->method($params); phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  50. 50. Code Time 
  51. 51. QuesRons?  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
  52. 52. 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 
  53. 53. Thank you!  Slides will be available at  www.simonecarleq.com  www.slideshare.net/weppos  Rate this talk at  hVp://joind.in/talk/view/417 
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×