Refactoring to Design Patterns (phpDay 2009)

Refactoring to Design Patterns (phpDay 2009)

@ phpDay 2009

99e0b39c091e10d9c7d4452a34ca52dc?s=128

Simone Carletti

May 15, 2009
Tweet

Transcript

  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. 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. 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. EvoluRon

  5. Maintainability phpDay 2009 – 15 e 16 Maggio Verona, Italy

  6. Maintainability Long project lifecycle phpDay 2009 – 15 e 16

    Maggio Verona, Italy
  7. Maintainability Long project lifecycle Scalability phpDay 2009 – 15 e

    16 Maggio Verona, Italy
  8. Maintainability Long project lifecycle Scalability Flexibility phpDay 2009 – 15

    e 16 Maggio Verona, Italy
  9. … and we need it for yesterday! phpDay 2009 –

    15 e 16 Maggio Verona, Italy
  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. None
  12. Bad Smell hVp://www.codinghorror.com/blog/ archives/000589.html

  13. D.R.Y. Don’t repeat yourself

  14. K.I.S.S. Keep it Simple, Stupid

  15. Y.A.G.N.I. You Ain't Gonna Need It

  16. Over‐Engineering phpDay 2009 – 15 e 16 Maggio Verona, Italy

  17. Under‐Engineering phpDay 2009 – 15 e 16 Maggio Verona, Italy

  18. Refactoring

  19. phpDay 2009 – 15 e 16 Maggio Verona, Italy

  20. 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
  21. Why? •  Improve readability •  Improve maintainability •  Gain a

    beVer understanding of code phpDay 2009 – 15 e 16 Maggio Verona, Italy
  22. 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
  23. Design Pa0erns

  24. Design PaVerns describe simple and elegant solu=ons to specific problems

    in object oriented soKware design. phpDay 2009 – 15 e 16 Maggio Verona, Italy
  25. phpDay 2009 – 15 e 16 Maggio Verona, Italy

  26. 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
  27. Context Problem Solu=on phpDay 2009 – 15 e 16 Maggio

    Verona, Italy
  28. 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
  29. Design Pa0erns by Purpose •  Crea=onal PaVerns •  Structural PaVerns

    •  Behavioral PaVerns •  Concurrency PaVerns •  Architectural PaVerns phpDay 2009 – 15 e 16 Maggio Verona, Italy
  30. 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
  31. TesRng

  32. phpDay 2009 – 15 e 16 Maggio Verona, Italy

  33. TesRng performance integra=on func=onal unit phpDay 2009 – 15 e

    16 Maggio Verona, Italy
  34. Test Driven Development phpDay 2009 – 15 e 16 Maggio

    Verona, Italy
  35. Tes=ng Refactoring Design PaVerns phpDay 2009 – 15 e 16

    Maggio Verona, Italy
  36. Refactoring to Design Pa0erns

  37. Observer

  38. 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
  39. Observer Post CacheSweeper Logger EmailNo=fier phpDay 2009 – 15 e

    16 Maggio Verona, Italy
  40. Observer Post CacheSweeper Logger EmailNo=fier $post‐>=tle = “foo”; $post‐>save(); phpDay

    2009 – 15 e 16 Maggio Verona, Italy
  41. Observer Post CacheSweeper Logger EmailNo=fier $post‐>=tle = “foo”; $post‐>save(); phpDay

    2009 – 15 e 16 Maggio Verona, Italy
  42. 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
  43. Observer Post CacheSweeper Logger EmailNo=fier $post‐>delete(); phpDay 2009 – 15

    e 16 Maggio Verona, Italy
  44. Observer Post CacheSweeper Logger EmailNo=fier $post‐>delete(); phpDay 2009 – 15

    e 16 Maggio Verona, Italy
  45. Observer Post CacheSweeper Logger EmailNo=fier aKer_delete() aKer_delete() $post‐>delete(); phpDay 2009

    – 15 e 16 Maggio Verona, Italy
  46. Code Time

  47. Strategy

  48. 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
  49. Strategy method($params) { // complex logic // conditional strategy }

    phpDay 2009 – 15 e 16 Maggio Verona, Italy
  50. 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
  51. Code Time

  52. QuesRons? phpDay 2009 – 15 e 16 Maggio Verona, Italy

  53. 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
  54. Thank you! Slides will be available at www.simonecarleq.com www.slideshare.net/weppos Rate

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