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 full-size 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 full-size 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  9. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  17. 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 full-size slide

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

    View full-size slide

  19. 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 full-size slide

  20. Design Pa0erns

    View full-size slide

  21. 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 full-size slide

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

    View full-size slide

  23. 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 full-size slide

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

    View full-size slide

  25. 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 full-size slide

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

    View full-size slide

  27. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  32. Refactoring to Design Pa0erns

    View full-size slide

  33. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  37. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  41. 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 full-size slide

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

    View full-size slide

  43. 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 full-size slide

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

    View full-size slide

  45. 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 full-size slide

  46. 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 full-size slide