40
 PhpDay 2009 Spaghetti Code Refactoring Gli spaghetti sono buoni!!...ma da mangiare. Francesco (cphp) Trucchia <[email protected]>

Spaghetti code refactoring

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Spaghetti code refactoring

   

PhpDay 2009

Spaghetti Code RefactoringGli spaghetti sono buoni!!...ma da mangiare.

Francesco (cphp) Trucchia <[email protected]>

Page 2: Spaghetti code refactoring

   

Devi lavorare su codice ingarbugliato come questi spaghetti?

Page 3: Spaghetti code refactoring

   

Solo chi l'ha scritto lo capisce?

Page 4: Spaghetti code refactoring

   

...e se ne sta andando?

Page 5: Spaghetti code refactoring

   

Il tuo boss vuole nuove features...

Page 6: Spaghetti code refactoring

   

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

Page 7: Spaghetti code refactoring

   

Che fare?

Page 8: Spaghetti code refactoring

   

Scappare?

Page 9: Spaghetti code refactoring

   

Temporeggiare?

Page 10: Spaghetti code refactoring

   

Lottare?

Page 11: Spaghetti code refactoring

   

Io non farei nulla di tutto ciò!

Page 12: Spaghetti code refactoring

   

REFACTORING IS THE ONLY WAY

Page 13: Spaghetti code refactoring

   

Perchè?

Page 14: Spaghetti code refactoring

   

Migliora il design

Page 15: Spaghetti code refactoring

   

Migliora la leggibilità

Page 16: Spaghetti code refactoring

   

Aumenta l'efficienza

Page 17: Spaghetti code refactoring

   

Mantiene il valore

Page 18: Spaghetti code refactoring

   

Abbatte i costi

Page 19: Spaghetti code refactoring

   

Quando?

Page 20: Spaghetti code refactoring

   

“Three strikes and you refactor”Don Roberts

Page 21: Spaghetti code refactoring

   

Quando aggiungi funzionalità

Page 22: Spaghetti code refactoring

   

Quando fai bug­fixing

Page 23: Spaghetti code refactoring

   

Come?

Page 24: Spaghetti code refactoring

   

Metodi usati

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

Page 25: Spaghetti code refactoring

   

Popular bed smells in code

● Procedural code

● Duplicated code

● Long method

● Large class

● Switch statements

● Comments

Page 26: Spaghetti code refactoring

   

Procedural code

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

Metodo: “big refactoring”

Page 27: Spaghetti code refactoring

   

Duplicated code

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

Metodo: “extract method”

Page 28: Spaghetti code refactoring

   

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”

Page 29: Spaghetti code refactoring

   

Large class

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

Metodo: “class extract”

Page 30: Spaghetti code refactoring

   

Switch statement

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

Metodo: “replace conditional with polymorphism”

Page 31: Spaghetti code refactoring

   

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.

Page 32: Spaghetti code refactoring

   

The big refactoring

Ora vedremo un esempio concreto di refactoring.

Refactoring di un'applicazione procedurale in codice ad oggetti.

Page 33: Spaghetti code refactoring

   

Requisiti

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

Page 34: Spaghetti code refactoring

   

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.

Page 35: Spaghetti code refactoring

   

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

Page 36: Spaghetti code refactoring

   

Il progetto

Wikihttp://www.assembla.com/wiki/show/phpday2009­spaghetti­code­refactoring

Web SVNhttp://code.assembla.com/phpday2009­spaghetti­code­refactoring/subversion/nodes

SVNhttp://subversion.assembla.com/svn/phpday2009­spaghetti­code­refactoring

Page 37: Spaghetti code refactoring

   

Libri

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

● Refactoring Databases:http://martinfowler.com/books.html#refactoringDatabases

Page 38: Spaghetti code refactoring

   

Risorse

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

Page 39: Spaghetti code refactoring

   

Contatti

Francesco Trucchia

E­mail: [email protected]

Skype: trucchia

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

Page 40: Spaghetti code refactoring

   

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/