Spaghetti code refactoring

1,873 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,873
On SlideShare
0
From Embeds
0
Number of Embeds
304
Actions
Shares
0
Downloads
22
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Spaghetti code refactoring

  1. 1. PhpDay 2009 Spaghetti Code Refactoring Gli spaghetti sono buoni!!...ma da mangiare. Francesco (cphp) Trucchia <ft@ideato.it>    
  2. 2. Devi lavorare su codice ingarbugliato  come questi spaghetti?    
  3. 3. Solo chi l'ha scritto lo capisce?    
  4. 4. ...e se ne sta andando?    
  5. 5. Il tuo boss vuole nuove features...    
  6. 6. ...e tu pensi sia un'impresa apocalittica?    
  7. 7. Che fare?    
  8. 8. Scappare?    
  9. 9. Temporeggiare?    
  10. 10. Lottare?    
  11. 11. Io non farei nulla di tutto ciò!    
  12. 12. REFACTORING IS THE ONLY WAY    
  13. 13. Perchè?    
  14. 14. Migliora il design    
  15. 15. Migliora la leggibilità    
  16. 16. Aumenta l'efficienza    
  17. 17. Mantiene il valore    
  18. 18. Abbatte i costi    
  19. 19. Quando?    
  20. 20. “Three strikes and you refactor” Don Roberts    
  21. 21. Quando aggiungi funzionalità    
  22. 22. Quando fai bug­fixing    
  23. 23. Come?    
  24. 24. Metodi usati ● TDD (test driven development) ● KISS (keep it simple and stupid) ● DRY (don't repeat yourself) ● DDD (domain driven design)    
  25. 25. Popular bed smells in code ● Procedural code ● Duplicated code ● Long method ● Large class ● Switch statements ● Comments    
  26. 26. Procedural code Il codice procedurale è difficile da leggere e da  mantenere. Tutto il codice procedurale deve diventare ad  oggetti. Metodo: “big refactoring”    
  27. 27. Duplicated code Se ci sono blocchi di codice ripetuti che fanno la  stessa cosa, uniamoli sotto un unico metodo. Metodo: “extract method”    
  28. 28. Long method Se esistono metodi molto lunghi spezziamo il loro  comportamento in tanti piccoli metodi o  deleghiamo alcune responsabilità a nuove classi. Metodi: “extract method”, “extract class”    
  29. 29. Large class Se una classe è troppo grande deleghiamo alcune  responsabilità ad altre classi. Metodo: “class extract”    
  30. 30. Switch statement Se ci sono blocchi switch complessi, utilizziamo il  polimorfismo per sostituirne la logica. Metodo: “replace conditional with polymorphism”    
  31. 31. Comment I commenti servono a descrivere le interfacce non  il codice. Se ho bisogno di scrivere un commento  per spiegare quello che il mio codice fa, significa  che il codice non è leggibile o disegnato bene. Invece di scrivere il commento, devo migliorare la  leggibilità del codice scritto.    
  32. 32. The big refactoring Ora vedremo un esempio concreto di refactoring. Refactoring di un'applicazione procedurale in  codice ad oggetti.    
  33. 33. Requisiti ● Apache ● MySql ● PHP 5 ● Client svn ● PHPUnit + Selenium ● Java    
  34. 34. La sfida Il nostro boss, che si è appena comprato l'iphone,  ha deciso che vuole estendere le funzionalità  dell'applicazione “Rubrica” per visualizzarne i  contatti su mobile. Problemi: ● L'applicazione è datata e chi l'ha sviluppata non  lavora più in azienda; ● E' scritta con codice procedurale.    
  35. 35. Step by step ● Scrittura dei test funzionali ● Creazione classe Main ● MVC: separiamo la logica di business da quella  di presentazione ● Introduzione dell'ORM ● Introduzione del Template Engine ● Introduzione del Controller    
  36. 36. Il progetto Wiki http://www.assembla.com/wiki/show/phpday2009­spaghetti­code­ refactoring Web SVN http://code.assembla.com/phpday2009­spaghetti­code­ refactoring/subversion/nodes SVN http://subversion.assembla.com/svn/phpday2009­spaghetti­code­ refactoring    
  37. 37. Libri ● Refactoring:  http://martinfowler.com/books.html#refactoring ● Refactoring Databases: http://martinfowler.com/books.html#refactoringD atabases    
  38. 38. Risorse ● http://martinfowler.com ● http://www.refactoring.com    
  39. 39. Contatti Francesco Trucchia E­mail: ft@ideato.it Skype: trucchia Vota il talk http://joind.in/talk/view/394    
  40. 40. Copyright foto Slide 3 foto di http://www.flickr.com/photos/kayasan/1613519480/sizes/o/ Slide 4 foto di http://www.flickr.com/photos/artefackto/2325934130/sizes/l/ Slide 5 foto di http://www.flickr.com/photos/pulpolux/36073243/sizes/o/ Slide 6 foto di http://www.flickr.com/photos/lilymonster/3291962406/sizes/l/ Slide 7 foto di http://www.flickr.com/photos/chrissomers/193120002/sizes/o/ Slide 8 foto di http://www.flickr.com/photos/ryanchrisbriggs/755579860/sizes/o/ Slide 9 foto di http://www.flickr.com/photos/boskizzi/2108302/sizes/o/ Slide 10 foto di http://www.flickr.com/photos/lilymonster/3291962406/sizes/l/ Slide 11 foto di http://www.flickr.com/photos/markus­merz/89082696/sizes/o/ Slide 12 foto di http://www.flickr.com/photos/donatellotrisolino/2820392011/sizes/l/ Slide 13 foto di http://www.flickr.com/photos/chrissomers/193120002/sizes/o/  Slide 15 foto di http://www.flickr.com/photos/luiginter/2250873/sizes/o/ Slide 16 foto di http://www.flickr.com/photos/ambrosianapictures/3102263687/sizes/l/ Slide 17 foto di http://www.flickr.com/photos/27117418@N07/2559014732/sizes/o/ Slide 18 foto di http://www.flickr.com/photos/ranran2/2954870079/sizes/o/  Slide 21 foto di http://www.flickr.com/photos/big_mouth/2704493108/sizes/o/ Slide 22 foto di http://www.flickr.com/photos/big_mouth/2704493108/sizes/o/    

×