Ricerca personalizzata

PHP Refactoring – Lez. 3: metodi di una classe

Pubblicato da Nicola in Refactoring

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

del.icio.us:PHP Refactoring - Lez. 3: metodi di una classe digg:PHP Refactoring - Lez. 3: metodi di una classe spurl:PHP Refactoring - Lez. 3: metodi di una classe wists:PHP Refactoring - Lez. 3: metodi di una classe simpy:PHP Refactoring - Lez. 3: metodi di una classe newsvine:PHP Refactoring - Lez. 3: metodi di una classe blinklist:PHP Refactoring - Lez. 3: metodi di una classe furl:PHP Refactoring - Lez. 3: metodi di una classe reddit:PHP Refactoring - Lez. 3: metodi di una classe fark:PHP Refactoring - Lez. 3: metodi di una classe blogmarks:PHP Refactoring - Lez. 3: metodi di una classe Y!:PHP Refactoring - Lez. 3: metodi di una classe smarking:PHP Refactoring - Lez. 3: metodi di una classe magnolia:PHP Refactoring - Lez. 3: metodi di una classe segnalo:PHP Refactoring - Lez. 3: metodi di una classe gifttagging:PHP Refactoring - Lez. 3: metodi di una classe oknotizie:PHP Refactoring - Lez. 3: metodi di una classe

2 Risposte to “PHP Refactoring – Lez. 3: metodi di una classe”

  1. dievoiciope ha scritto:

    Действительно классная темка.

  2. Nicola ha scritto:

    спасибо Вам за комментарий

    Nicola

Rispondi

Enter this code