PHP Refactoring – Lez. 3: metodi di una classe
Per quanto riguarda i metodi di una classe, vale anche in questo caso la naming convention esposta in precedenza per le proprietà della classe stessa. Le ripetiamo per comodità qui di seguito:
- Se composto da singola parola tutto in minuscolo; per esempio valuta();
- Se composta da più parole la prima lettera di ciascuna, a partire dalla seconda, in maiuscolo, tutte le altre minuscole; per esempio aggiungiElemento();
- Il nome del metodo deve essere autoesplicativo.
In aggiunta a queste regole consideriamo anche le seguenti:
- Se il nome del metodo è composto da più azioni scinderlo in tanti metodi quante sono le azioni;
- La lunghezza del corpo del metodo non deve superare le 40 righe;
- Il numero dei parametri non deve superare un massimo di 4;
Nome metodo composto da più azioni
Mettete il caso che nello scrivere il codice di una classe abbiate un metodo con la seguente signature:
public function controllaImmagazzina($prodotto)
Il codice del metodo è il seguente:
|
class Magazzino { public function controllaImmagazzina($prodotto) { if ($prodotto==null) { return “prodotto non settato”; } else if (substr($prodotto->getCodice(), 0, 3)==”CAT”) { return “prodotto con vecchia catalogazione”; } else if ($prodotto->getIngombro()>10) { return “prodotto troppo ingombrante”; } $db = new Db(”mysql”); $db->update($prodotto); } ……………………………………… } |
come potete vedere, abbiamo inserito in un unico metodo azioni che potrebbero tornarci utili anche singolarmente; per questo motivo dobbiamo scindere ogni azione in un nuovo metodo e nel caso ci serva utilizzarle contemporaneamente creiamo un ulteriore metodo che le richiami in sequenza.
Seguendo le indicazioni appena fornite, il codice precedente dovrebbe apparire come segue:
|
class Magazzino { ………………………………………… public function controlla($prodotto) { if ($prodotto==null) { return “prodotto non settato”; } else if (substr($prodotto->getCodice(), 0, 3)==”CAT”) { return “prodotto con vecchia catalogazione”; } else if ($prodotto->getIngombro()>10) { return “prodotto troppo ingombrante”; } return “”; } public function immagazzina($prodotto) { $db = new Db(”mysql”); $db->update($prodotto); } public prendeInCarico($prodotto) { $msg = $this->controlla($prodotto); if ($msg !== “”) { echo $msg; } else { $this->immagazzina($prodotto); echo “Presa in carico andata a buon fine”; } } } $objProdotto = new Prodotto(); $objMagazzino = new Magazzino(); $msg = $objMagazzino->prendeInCarico($objProdotto) echo $msg; |
Riscrivendo il codice lo abbiamo reso più leggibile e riutilizzabile, nel caso volessimo solo controllare un prodotto all’interno di un altro metodo, o solamente immagazzinare un prodotto che non necessita di controllo.
Analizziamo ora gli altri requisiti.
Pagine: 1 2
























Loading ...





Dicembre 17th, 2008 alle 17:34
Действительно классная темка.
Dicembre 18th, 2008 alle 17:59
спасибо Вам за комментарий
Nicola