sabato 29 maggio 2010

DRY up your code e Anti-If... please!

Ieri un'amica mi ha chiesto di spostare il suo sito da un provider ad un altro.

Ecco alcuni spunti di riflessione che ho trovato spulciando il codice sorgente:

  1. DRY up your code (Don't Repeat Yourself)
    Nel codice erano presenti 4 punti dove modificare i parametri di accesso al database, non era molto più semplice mettere tutto in un file di configurazione separato?

  2. Ancora:  DRY up your code (Don't Repeat Yourself) e Anti-If (e qui siamo ai livelli di CodingHorror)
    Il codice che impostava la home page nel caso non ci fossero richieste specifiche era una interminabile catena di if.


Ecco qui un bel esempio da non seguire:
$pid=$HTTP_GET_VARS['pid'];
if($pid == '0' ||
$pid == '1' ||
$pid == '11' ||
$pid == '2' ||
$pid == '3' ||
$pid == '4' ||
$pid == '5' ||
.....
) {
;
}else{
$pid = '0';
}

Bene, proviamo a rifattorizzare un pò questo codice e renderlo in po più flessibile:

  1. Creiamo un array di 'pagine'
    $authirizedPages = array('0', '1', '11', '2', '3', '4', '5',.......);
    $pid = '0';
    if(in_array($HTTP_GET_VARS['pid'], $authirizedPage)){
    $pid =$HTTP_GET_VARS['pid'];
    }

    A questo punto il codice è già molto più flessibile rispetto a prima, basta modificare l'array di pagine autorizzate.

  2. Il passo successivo è rendere indipendente il codice dalla base dati
    $authirizedPages = mysql_fetch_array( mysql_query( 'SELECT id FROM pages' ));
    $pid = '0';
    if(in_array($HTTP_GET_VARS['pid'], $authirizedPage)){
    $pid =$HTTP_GET_VARS['pid'];
    }



  3. Ora possiamo anche eliminare una variabile:

    $pid = '0';
    if(in_array($HTTP_GET_VARS['pid'], mysql_fetch_array( mysql_query( 'SELECT id FROM pages' )))){
    $pid =$HTTP_GET_VARS['pid'];
    }

    A questo punto potremmo anche fermarci, il codice è molto più compatto e flessibile rispetto a prima e l'aggiunta di una pagina comporta semplicemente l'aggiunta di un record sul database e nessuna modifica al codice. Questa è e deve essere una buona norma! Codice indipendente e non ripetuto!


Qualunque suggerimento ovviamente è ben accetto, solo in questo modo è possibile migliorarsi.

Ciao
P

Nessun commento:

Posta un commento