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

    View Slide

  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

    View Slide

  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

    View Slide

  4. EvoluRon

    View Slide

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

    View Slide

  6. Maintainability
    Long project lifecycle
    phpDay 2009 – 15 e 16 Maggio Verona, Italy

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  11. View Slide

  12. Bad Smell
    hVp://www.codinghorror.com/blog/
    archives/000589.html

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. Refactoring

    View Slide

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

    View Slide

  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

    View Slide

  21. Why?
    •  Improve readability
    •  Improve maintainability
    •  Gain a beVer understanding of code
    phpDay 2009 – 15 e 16 Maggio Verona, Italy

    View Slide

  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

    View Slide

  23. Design Pa0erns

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  27. Context
    Problem
    Solu=on
    phpDay 2009 – 15 e 16 Maggio Verona, Italy

    View Slide

  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

    View Slide

  29. Design Pa0erns by Purpose
    •  Crea=onal PaVerns
    •  Structural PaVerns
    •  Behavioral PaVerns
    •  Concurrency PaVerns
    •  Architectural PaVerns
    phpDay 2009 – 15 e 16 Maggio Verona, Italy

    View Slide

  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

    View Slide

  31. TesRng

    View Slide

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

    View Slide

  33. TesRng
    performance
    integra=on
    func=onal
    unit
    phpDay 2009 – 15 e 16 Maggio Verona, Italy

    View Slide

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

    View Slide

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

    View Slide

  36. Refactoring to Design Pa0erns

    View Slide

  37. Observer

    View Slide

  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

    View Slide

  39. Observer
    Post
    CacheSweeper Logger
    EmailNo=fier
    phpDay 2009 – 15 e 16 Maggio Verona, Italy

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  46. Code Time

    View Slide

  47. Strategy

    View Slide

  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

    View Slide

  49. Strategy
    method($params)
    {
    // complex logic
    // conditional strategy
    }
    phpDay 2009 – 15 e 16 Maggio Verona, Italy

    View Slide

  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

    View Slide

  51. Code Time

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide