SlideShare a Scribd company logo
1 of 40
Download to read offline
PhpDay 2009




             Spaghetti Code Refactoring
     Gli spaghetti sono buoni!!...ma da mangiare.

           Francesco (cphp) Trucchia <ft@ideato.it>




                               
Devi lavorare su codice ingarbugliato 
    come questi spaghetti?




                              
Solo chi l'ha scritto lo capisce?




           
...e se ne sta andando?




                               
Il tuo boss vuole nuove features...




                      
...e tu pensi sia un'impresa apocalittica?




                         
Che fare?




         
Scappare?
                 
Temporeggiare?
     
Lottare?
                
Io non farei nulla di tutto ciò!




                    
REFACTORING IS THE ONLY WAY
                   
Perchè?




        
Migliora il design




             
Migliora la leggibilità




                               
Aumenta l'efficienza




                            
Mantiene il valore




                          
Abbatte i costi




                       
Quando?




        
“Three strikes and you refactor”
                           Don Roberts




                       
Quando aggiungi funzionalità
                  
Quando fai bug­fixing




                             
Come?




       
Metodi usati

    ●   TDD (test driven development)
    ●   KISS (keep it simple and stupid)
    ●   DRY (don't repeat yourself)
    ●   DDD (domain driven design)




                               
Popular bed smells in code

    ●   Procedural code
    ●   Duplicated code
    ●   Long method
    ●   Large class
    ●   Switch statements
    ●   Comments




                             
Procedural code

Il codice procedurale è difficile da leggere e da 
mantenere. Tutto il codice procedurale deve diventare ad 
oggetti.


Metodo: “big refactoring”




                             
Duplicated code

Se ci sono blocchi di codice ripetuti che fanno la 
stessa cosa, uniamoli sotto un unico metodo.


Metodo: “extract method”




                            
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”




                          
Large class

Se una classe è troppo grande deleghiamo alcune 
responsabilità ad altre classi.


Metodo: “class extract”




                           
Switch statement

Se ci sono blocchi switch complessi, utilizziamo il 
polimorfismo per sostituirne la logica.


Metodo: “replace conditional with polymorphism”




                           
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.




                          
The big refactoring

Ora vedremo un esempio concreto di refactoring.


Refactoring di un'applicazione procedurale in 
codice ad oggetti.




                          
Requisiti

    ●   Apache
    ●   MySql
    ●   PHP 5
    ●   Client svn
    ●   PHPUnit + Selenium
    ●   Java


                              
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.

                                
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


                                     
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

                                   
Libri

    ●   Refactoring: 
        http://martinfowler.com/books.html#refactoring
    ●   Refactoring Databases:
        http://martinfowler.com/books.html#refactoringD
        atabases




                               
Risorse

    ●   http://martinfowler.com
    ●   http://www.refactoring.com




                                   
Contatti

Francesco Trucchia


E­mail: ft@ideato.it
Skype: trucchia


Vota il talk http://joind.in/talk/view/394


                             
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/




                                                              

More Related Content

Similar to Spaghetti code refactoring

Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008Mauro Servienti
 
Lo sviluppo delle mucche viola
Lo sviluppo delle mucche violaLo sviluppo delle mucche viola
Lo sviluppo delle mucche violaJacopo Romei
 
Intoduzione Alle Metodologie Agili
Intoduzione Alle Metodologie AgiliIntoduzione Alle Metodologie Agili
Intoduzione Alle Metodologie AgiliStefano Leli
 
Francesco Trucchia: Rapid Application Developement con strumenti Open Source
Francesco Trucchia: Rapid Application Developement con strumenti Open SourceFrancesco Trucchia: Rapid Application Developement con strumenti Open Source
Francesco Trucchia: Rapid Application Developement con strumenti Open SourceFrancesco Fullone
 
Session isolation e rendering delle pagine web
Session isolation e rendering delle pagine webSession isolation e rendering delle pagine web
Session isolation e rendering delle pagine webGiacomo Zecchini
 
Breaking the ice with agile - cinque strade per rompere il ghiaccio e introdu...
Breaking the ice with agile - cinque strade per rompere il ghiaccio e introdu...Breaking the ice with agile - cinque strade per rompere il ghiaccio e introdu...
Breaking the ice with agile - cinque strade per rompere il ghiaccio e introdu...Pietro Di Bello
 
Sai lavorare Agile? Un nuovo modo di pensare i progetti; un nuovo modo di lav...
Sai lavorare Agile? Un nuovo modo di pensare i progetti; un nuovo modo di lav...Sai lavorare Agile? Un nuovo modo di pensare i progetti; un nuovo modo di lav...
Sai lavorare Agile? Un nuovo modo di pensare i progetti; un nuovo modo di lav...InSide Training
 
... thinking about Microformats!
... thinking about Microformats!... thinking about Microformats!
... thinking about Microformats!Stefano Fago
 
Wpc2019 - Distruggere DevOps, la storia di un vero team
Wpc2019 - Distruggere DevOps, la storia di un vero teamWpc2019 - Distruggere DevOps, la storia di un vero team
Wpc2019 - Distruggere DevOps, la storia di un vero teamAlessandro Alpi
 
Guida galattica a Javascript
Guida galattica a JavascriptGuida galattica a Javascript
Guida galattica a JavascriptThinkOpen
 
"ThinkOpen Agile Days - #Day3" by Donato Andrisani e Giuseppe Trotta
"ThinkOpen Agile Days - #Day3" by Donato Andrisani e Giuseppe Trotta"ThinkOpen Agile Days - #Day3" by Donato Andrisani e Giuseppe Trotta
"ThinkOpen Agile Days - #Day3" by Donato Andrisani e Giuseppe TrottaThinkOpen
 
2014 11-21 presentazione breton agile at work - trento
2014 11-21 presentazione breton agile at work - trento2014 11-21 presentazione breton agile at work - trento
2014 11-21 presentazione breton agile at work - trentoClaudio Saurin
 
Atomic Design e sviluppo di un Design System
Atomic Design e sviluppo di un Design SystemAtomic Design e sviluppo di un Design System
Atomic Design e sviluppo di un Design SystemEdoardo Sportelli
 
Seminario Drupal 2012
Seminario Drupal 2012Seminario Drupal 2012
Seminario Drupal 2012Nicola Corti
 
Come strutturare un design semplice ed efficace per WordPress
Come strutturare un design semplice ed efficace per WordPressCome strutturare un design semplice ed efficace per WordPress
Come strutturare un design semplice ed efficace per WordPressSiteGround.com
 
Lean UX Development - Approach and toolkit
Lean UX Development - Approach and toolkitLean UX Development - Approach and toolkit
Lean UX Development - Approach and toolkitCodemotion
 
Lean UX Approach for developers
Lean UX Approach for developersLean UX Approach for developers
Lean UX Approach for developersFabio Fabbrucci
 

Similar to Spaghetti code refactoring (20)

Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008
 
Lo sviluppo delle mucche viola
Lo sviluppo delle mucche violaLo sviluppo delle mucche viola
Lo sviluppo delle mucche viola
 
Drupal7
Drupal7Drupal7
Drupal7
 
Intoduzione Alle Metodologie Agili
Intoduzione Alle Metodologie AgiliIntoduzione Alle Metodologie Agili
Intoduzione Alle Metodologie Agili
 
Francesco Trucchia: Rapid Application Developement con strumenti Open Source
Francesco Trucchia: Rapid Application Developement con strumenti Open SourceFrancesco Trucchia: Rapid Application Developement con strumenti Open Source
Francesco Trucchia: Rapid Application Developement con strumenti Open Source
 
Novità Per Gli Sviluppatori Nella R85 Dominopoint Day 2008
Novità Per Gli Sviluppatori Nella R85 Dominopoint Day 2008Novità Per Gli Sviluppatori Nella R85 Dominopoint Day 2008
Novità Per Gli Sviluppatori Nella R85 Dominopoint Day 2008
 
Session isolation e rendering delle pagine web
Session isolation e rendering delle pagine webSession isolation e rendering delle pagine web
Session isolation e rendering delle pagine web
 
Breaking the ice with agile - cinque strade per rompere il ghiaccio e introdu...
Breaking the ice with agile - cinque strade per rompere il ghiaccio e introdu...Breaking the ice with agile - cinque strade per rompere il ghiaccio e introdu...
Breaking the ice with agile - cinque strade per rompere il ghiaccio e introdu...
 
Sai lavorare Agile? Un nuovo modo di pensare i progetti; un nuovo modo di lav...
Sai lavorare Agile? Un nuovo modo di pensare i progetti; un nuovo modo di lav...Sai lavorare Agile? Un nuovo modo di pensare i progetti; un nuovo modo di lav...
Sai lavorare Agile? Un nuovo modo di pensare i progetti; un nuovo modo di lav...
 
... thinking about Microformats!
... thinking about Microformats!... thinking about Microformats!
... thinking about Microformats!
 
Wpc2019 - Distruggere DevOps, la storia di un vero team
Wpc2019 - Distruggere DevOps, la storia di un vero teamWpc2019 - Distruggere DevOps, la storia di un vero team
Wpc2019 - Distruggere DevOps, la storia di un vero team
 
Guida galattica a Javascript
Guida galattica a JavascriptGuida galattica a Javascript
Guida galattica a Javascript
 
"ThinkOpen Agile Days - #Day3" by Donato Andrisani e Giuseppe Trotta
"ThinkOpen Agile Days - #Day3" by Donato Andrisani e Giuseppe Trotta"ThinkOpen Agile Days - #Day3" by Donato Andrisani e Giuseppe Trotta
"ThinkOpen Agile Days - #Day3" by Donato Andrisani e Giuseppe Trotta
 
2014 11-21 presentazione breton agile at work - trento
2014 11-21 presentazione breton agile at work - trento2014 11-21 presentazione breton agile at work - trento
2014 11-21 presentazione breton agile at work - trento
 
Atomic Design e sviluppo di un Design System
Atomic Design e sviluppo di un Design SystemAtomic Design e sviluppo di un Design System
Atomic Design e sviluppo di un Design System
 
Seminario Drupal 2012
Seminario Drupal 2012Seminario Drupal 2012
Seminario Drupal 2012
 
Launchpad e code review
Launchpad e code reviewLaunchpad e code review
Launchpad e code review
 
Come strutturare un design semplice ed efficace per WordPress
Come strutturare un design semplice ed efficace per WordPressCome strutturare un design semplice ed efficace per WordPress
Come strutturare un design semplice ed efficace per WordPress
 
Lean UX Development - Approach and toolkit
Lean UX Development - Approach and toolkitLean UX Development - Approach and toolkit
Lean UX Development - Approach and toolkit
 
Lean UX Approach for developers
Lean UX Approach for developersLean UX Approach for developers
Lean UX Approach for developers
 

More from Francesco Trucchia

Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...
Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...
Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...Francesco Trucchia
 
Oltre Tata: lean startup all'italiana
Oltre Tata: lean startup all'italianaOltre Tata: lean startup all'italiana
Oltre Tata: lean startup all'italianaFrancesco Trucchia
 
Reingegnerizzazione di un Content Management System verso l'accessibilità sec...
Reingegnerizzazione di un Content Management System verso l'accessibilità sec...Reingegnerizzazione di un Content Management System verso l'accessibilità sec...
Reingegnerizzazione di un Content Management System verso l'accessibilità sec...Francesco Trucchia
 
eZ publish - Introduzione al sistema
eZ publish - Introduzione al sistemaeZ publish - Introduzione al sistema
eZ publish - Introduzione al sistemaFrancesco Trucchia
 

More from Francesco Trucchia (10)

Pro php refactoring
Pro php refactoringPro php refactoring
Pro php refactoring
 
Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...
Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...
Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...
 
Business model canvas
Business model canvasBusiness model canvas
Business model canvas
 
Cowo42 - Coworking Osimo
Cowo42 - Coworking OsimoCowo42 - Coworking Osimo
Cowo42 - Coworking Osimo
 
Oltre Tata: lean startup all'italiana
Oltre Tata: lean startup all'italianaOltre Tata: lean startup all'italiana
Oltre Tata: lean startup all'italiana
 
Agile software lifecycle
Agile software lifecycleAgile software lifecycle
Agile software lifecycle
 
Extreme Programming e PHP
Extreme Programming e PHPExtreme Programming e PHP
Extreme Programming e PHP
 
Reingegnerizzazione di un Content Management System verso l'accessibilità sec...
Reingegnerizzazione di un Content Management System verso l'accessibilità sec...Reingegnerizzazione di un Content Management System verso l'accessibilità sec...
Reingegnerizzazione di un Content Management System verso l'accessibilità sec...
 
eZ publish - Introduzione al sistema
eZ publish - Introduzione al sistemaeZ publish - Introduzione al sistema
eZ publish - Introduzione al sistema
 
eZ publish - Extension
eZ publish - ExtensioneZ publish - Extension
eZ publish - Extension
 

Spaghetti code refactoring