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. 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. 9.
  5. 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
  6. 11.
  7. 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
  8. 21.

    Why? •  Improve readability •  Improve maintainability •  Gain a

    beVer understanding of code phpDay 2009 – 15 e 16 Maggio Verona, Italy
  9. 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
  10. 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
  11. 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
  12. 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
  13. 29.

    Design Pa0erns by Purpose •  Crea=onal PaVerns •  Structural PaVerns

    •  Behavioral PaVerns •  Concurrency PaVerns •  Architectural PaVerns phpDay 2009 – 15 e 16 Maggio Verona, Italy
  14. 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
  15. 31.
  16. 37.
  17. 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
  18. 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
  19. 46.
  20. 47.
  21. 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
  22. 49.

    Strategy method($params) { // complex logic // conditional strategy }

    phpDay 2009 – 15 e 16 Maggio Verona, Italy
  23. 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
  24. 51.
  25. 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