Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Refactoring to Design Patterns (phpDay 2009)

Refactoring to Design Patterns (phpDay 2009)

@ phpDay 2009

Simone Carletti

May 15, 2009
Tweet

More Decks by Simone Carletti

Other Decks in Programming

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

    beVer understanding of code phpDay 2009 – 15 e 16 Maggio Verona, Italy
  7. 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
  8. Design PaVerns describe simple and elegant solu=ons to specific problems

    in object oriented soKware design. phpDay 2009 – 15 e 16 Maggio Verona, Italy
  9. 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
  10. 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
  11. Design Pa0erns by Purpose •  Crea=onal PaVerns •  Structural PaVerns

    •  Behavioral PaVerns •  Concurrency PaVerns •  Architectural PaVerns phpDay 2009 – 15 e 16 Maggio Verona, Italy
  12. 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
  13. 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
  14. 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
  15. 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
  16. Strategy method($params) { // complex logic // conditional strategy }

    phpDay 2009 – 15 e 16 Maggio Verona, Italy
  17. 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
  18. 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