Spaghetti code refactoring
-
Upload
francesco-trucchia -
Category
Technology
-
view
2.719 -
download
1
description
Transcript of Spaghetti code refactoring
PhpDay 2009
Spaghetti Code RefactoringGli spaghetti sono buoni!!...ma da mangiare.
Francesco (cphp) Trucchia <[email protected]>
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 bugfixing
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
Wikihttp://www.assembla.com/wiki/show/phpday2009spaghetticoderefactoring
Web SVNhttp://code.assembla.com/phpday2009spaghetticoderefactoring/subversion/nodes
SVNhttp://subversion.assembla.com/svn/phpday2009spaghetticoderefactoring
Libri
● Refactoring: http://martinfowler.com/books.html#refactoring
● Refactoring Databases:http://martinfowler.com/books.html#refactoringDatabases
Contatti
Francesco Trucchia
Email: [email protected]
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/markusmerz/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/