spaghetti code refactoring

Post on 02-Nov-2014

2.718 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

   

PhpDay 2009

Spaghetti Code RefactoringGli 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

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

   

Libri

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

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

   

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/

top related