Principi DRY vs ambito variabile locale-solo nelle funzioni (domanda motivata da PHP)

0

Sono nuovo nella programmazione e in particolare nuovo in PHP. Trovo spesso che DRY sia direttamente contrario al principio di mantenere le variabili locali nelle funzioni PHP. A volte penso che sia più facile violare DRY per poter accedere prontamente a grandi array piuttosto che passare questi array o i relativi sottocomponenti rilevanti come parametri nelle funzioni.

Qualcuno ha pensieri su questo o su esempi di codice che trova un altro modo? Ecco un esempio del tipo di codice che a volte scrivo perché i miei array sono grandi e non voglio copiarli / passarli o scrivere tutti i blocchi che potrei usare in una funzione, quindi decidere di violare il DRY e non usarlo una funzione:

if($array1['status'][$i]==1)
{
    for($j = 1; $j < 3; $j ++)
    {
        $j = 1;
        $dist = $array2['dist'][$j];
        $id =  $array2['id'][$j];
        $email =  $array2['email'][$j];
        send_offer_email($array1['appt_id'][$i], $array1['fulladd'][$i], $dist, $id, $email);
        $j = 2;
        $dist = $array2['dist'][$j];
        $id =  $array2['id'][$j];
        $email =  $array2['email'][$j];
        send_offer_email($array1['appt_id'][$i], $array1['fulladd'][$i], $dist, $id, $email);
    }
}
elseif($array1['status'][$i]==2)
{
    for($j = 3; $j < 7; $j ++)
    {
        $j = 1;
        $dist = $array2['dist'][$j];
        $id =  $array2['id'][$j];
        $email =  $array2['email'][$j];
        send_offer_email($array1['appt_id'][$i], $array1['fulladd'][$i], $dist, $id, $email);
        $j = 2;
        $dist = $array2['dist'][$j];
        $id =  $array2['id'][$j];
        $email =  $array2['email'][$j];
        send_offer_email($array1['appt_id'][$i], $array1['fulladd'][$i], $dist, $id, $email);
    }
}

Chiaramente sono un noob, ma mi piacerebbe sapere cosa c'è di sbagliato nel fare questo vs dover scrivere tutte le cazzate di cui avrei bisogno per ridurre ognuna di queste se filiali a qualcosa di simile:

$j = 1
function(blah blah, $j)

In particolare, il blah blah nella funzione di cui sopra sarebbe molto lungo e viola sé stesso.

Grazie!

    
posta sunny 10.04.2015 - 00:32
fonte

1 risposta

1

Il tuo codice è molto difficile da leggere e sembra che i tuoi dati non siano ben strutturati per ciò che rappresenta e come viene utilizzato. Sospetto che se risolvi questi problemi, la soluzione al tuo problema di riusabilità diventerà chiara.

Non è del tutto ovvio ciò che fa il tuo codice, ma prendi questo esempio liberamente in base a ciò che penso che stia facendo il tuo codice:

class Applicant {

    public $id;
    public $address;
    public $email;
    public $status;

    public function sendDecision() {
        if($this->status == 1) {
            $this->sendOffer();
        } else {
            $this->sendRejection();
        }
    }

    public function sendOffer() {
        // Do something with $this->email
    }

    public function sendRejection() {
        // Do something with $this->email
    }
}

$applications = array(); // Populate this with an array of Applicant instances

foreach($applications as $applicant) {
    $applicant->sendDecision();
}

Questo ti impedisce di creare una foschia di indici di array facili da mescolare, mantiene logici e dati correlati raggruppati e ti consente di fare qualcosa di diverso a seconda dello stato senza duplicare il codice.

    
risposta data 10.04.2015 - 05:23
fonte

Leggi altre domande sui tag