di: Gabriele Farina 27 Settembre 2007
Con questo articolo iniziamo ad addentrarci nella spiegazione delle differenti tecniche di refactoring che possono essere applicate al codice sorgente; come accennato nel primo articolo, la maggior parte delle operazioni di refactoring sono state studiate per poter lavorare correttamente a fianco della programmazione ad oggetti. Questo non significa che le tecniche non siano applicabili anche a paradigmi di programmazione differenti, ma sicuramente l'operazione risulta un po' più laboriosa ed alcune volte meno efficace.
Questo articolo parlerà di alcune delle tecniche più comuni che hanno a che vedere con i metodi. Ho deciso di iniziare con questo gruppo poiché queste tecniche di refactoring sono quelle più utilizzate: spesso sono infatti utilizzate anche in cooperazione con altre tecniche per ottenere risultati più complessi.
Prima di iniziare ricordo che è fondamentale effettuare i test il più frequentemente possibile: modificate il codice, testate e se tutto funziona potete eliminare il codice eventualmente in eccesso e procedere.
La prima tecnica che mi accingo a descrivere non è sicuramente la più utilizzata, ma rende bene la concezione che sta alla base del refactoring. Come detto nell'articolo precedente, uno dei principali obiettivi del refactoring è generare codice che sia leggibile e di conseguenza gestibile nel tempo anche da mani diverse. La leggibilità del codice spesso è soggettiva, ma una chiarezza nei nomi dei metodi è un passo molto importante per permettere a chiunque di avere una comprensione omogenea delle operazioni svolte.
Il nome di un metodo deve essere autoesplicativo, fungendo da commento di se stesso. Durante le operazioni di refactoring (come quella che descriverò successivamente) accade spesso di aggiungere metodi al proprio codice. Questi metodi hanno un nome che descrive molto bene il contenuto e su questi metodi verranno operate altre tecniche di refactoring. Alcune volte accade che il corpo di un metodo sia esplicativo quanto il suo nome, ed in questo momento interviene la tecnica dell'Inline Method: sostituire alla chiamata del metodo il codice contenuto nel suo corpo.
Come sappiamo uno dei principi fondamentali del refactoring è il cercare di separare il più possibile le operazioni in metodi. Questo consente a sua volta di facilitare altre tecniche di refactoring, migliorare la leggibilità e molto altro. Troppa frammentazione comunque, soprattutto se non necessaria, può causare problemi e quindi in quei casi in cui abbiamo un corpo del metodo autoesplicativo, operiamo l'Inline Method.
Vediamo un esempio di questa tecnica:
class Person
{
public function drive()
{
if( $this->olderThan( 17 ) )
{
// Guida
}else
{
// Genera un errore
}
}
public function olderThan( $min_age )
{
return ( $this->age > $min_age );
}
}
Il metodo olderThan in questo caso può essere tranquillamente inserito nel corpo del chiamate. Nel caso specifico sostituiremo anche la variabile locale con l'argomento passato alla chiamata del metodo:
class Person
{
public function drive()
{
if( $this->age > 17 )
{
// Guida
}else
{
// Genera un errore
}
}
}
Ci sono alcuni punti da tenere in considerazione quando si applica questa tecnica: in primis è importante assicurarsi che il metodo non sia polimorfico e che quindi non sia sovrascritto da eventuali sottoclassi della classe in cui è definito. In secondo caso se applicare l'Inline Method non risultasse un'operazione immediata (come nel caso in cui si ha a che fare con ricorsione) allora significa che la tecnica non va adottata.
L'Inline Method viene spesso utilizzato anche quando si ha la sensazione che una parte del proprio codice non sia stata ristrutturata bene: in questo caso si applica la tecnica a tutti i metodi interessati e successivamente si procede con il refactoring alla ricerca di una migliore struttura. L'importante, come per tutte le tecniche di refactoring, è non abusare: ci sono situazioni in cui applicare questa operazione può creare problemi al resto del codice e quindi in questi casi l'Inline Method deve essere evitato e deve essere affiancata qualche tecnica che ne limiti le problematiche.
Guida Yii FrameworkCome creare applicazioni Web in modo semplice e veloce con il... |
Guida Zend FrameworkDiventate professionisti dello sviluppo Web. Zend Framework è lo... |
Guida Applicazioni Facebook con PHPCome realizzare un'applicazione per Facebook. Dalle basi della... |
Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.
Iscriviti alla newsletter
|
|
Corso PHP per Webmaster11 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |