• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Refactoring to Design Patterns (phpDay 2009)
 

Refactoring to Design Patterns (phpDay 2009)

on

  • 2,421 views

 

Statistics

Views

Total Views
2,421
Views on SlideShare
2,169
Embed Views
252

Actions

Likes
2
Downloads
33
Comments
0

6 Embeds 252

http://www.simonecarletti.com 145
http://www.phpday.it 96
http://lanyrd.com 7
http://www.slideshare.net 2
http://coderwall.com 1
http://simonecarletti.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Refactoring to Design Patterns (phpDay 2009) Refactoring to Design Patterns (phpDay 2009) Presentation Transcript

    • 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 
    • 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 
    • 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 
    • EvoluRon 
    • Maintainability  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Maintainability  Long project lifecycle  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Maintainability  Long project lifecycle  Scalability  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Maintainability  Long project lifecycle  Scalability  Flexibility  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • … and we need it for yesterday!  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • 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 
    • Bad Smell  hVp://www.codinghorror.com/blog/ archives/000589.html 
    • D.R.Y.  Don’t repeat yourself 
    • K.I.S.S.  Keep it Simple, Stupid 
    • Y.A.G.N.I.  You Ain't Gonna Need It  
    • Over‐Engineering  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Under‐Engineering  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Refactoring 
    • phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • 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 
    • Why?  •  Improve readability  •  Improve maintainability  •  Gain a beVer understanding of code  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • 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 
    • Design Pa0erns 
    • Design PaVerns describe simple and elegant  solu=ons to specific problems in object  oriented soKware design.  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • 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 
    • Context  Problem  Solu=on  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • 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 
    • Design Pa0erns by Purpose  •  Crea=onal PaVerns  •  Structural PaVerns  •  Behavioral PaVerns  •  Concurrency PaVerns  •  Architectural PaVerns  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • 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 
    • TesRng 
    • phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • TesRng  performance  integra=on  func=onal  unit  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Test Driven Development  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Design  Tes=ng  PaVerns  Refactoring  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Refactoring to Design Pa0erns 
    • Observer 
    • 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 
    • Observer  Post  CacheSweeper  EmailNo=fier  Logger  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Observer  $post‐>=tle = “foo”;  Post  $post‐>save();  CacheSweeper  EmailNo=fier  Logger  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Observer  $post‐>=tle = “foo”;  Post  $post‐>save();  CacheSweeper  EmailNo=fier  Logger  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Observer  $post‐>=tle = “foo”;  Post  $post‐>save();  CacheSweeper  EmailNo=fier  Logger  aKer_save()  aKer_save()  aKer_save()  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Observer  $post‐>delete();  Post  CacheSweeper  EmailNo=fier  Logger  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Observer  $post‐>delete();  Post  CacheSweeper  EmailNo=fier  Logger  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Observer  $post‐>delete();  Post  CacheSweeper  EmailNo=fier  Logger  aKer_delete()  aKer_delete()  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Code Time 
    • Strategy 
    • Strategy  function doSomething($even, $odd) { if ($even == quot;secretquot;) { if ($odd == quot;other secretquot;) { return 1; } else if (quot;pizzaquot; == quot;goodquot;) { return quot;Yes it is!quot;; } } else if ($odd != $even) { return quot;yeah, they arequot;; } else { return quot;I'm getting crazyquot;; } }  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Strategy  method($params) { // complex logic // conditional strategy } phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Strategy  method($params) { $s = new Strategy(); $s->method($params); } $s = new Strategy() Strategy 1  Strategy 2  Strategy 3  $s->method($params); phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • Code Time 
    • QuesRons?  phpDay 2009 – 15 e 16 Maggio  Verona, Italy 
    • 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 
    • Thank you!  Slides will be available at  www.simonecarleq.com  www.slideshare.net/weppos  Rate this talk at  hVp://joind.in/talk/view/417