Progettazione fallita [duplicato]

0

Recentemente ho la tendenza a progettare i miei metodi nel modo seguente:

if ( 'A' === $a ) {
    if ( 'B' === $b ) {
        return 'some thing';
    } else if ( 'C' === $c ) {
        return 'some other things';
    }
}

/* If you made it up to here, then something has gone wrong */
return false;

Quindi fondamentalmente l'idea è di verificare se la prima condizione è corretta, se è poi continuare fino a raggiungere la prima istruzione return per restituire il risultato previsto, in caso contrario passare alla condizione successiva e così via.

La chiave è che tutte le funzionalità del metodo sono già state ridotte e racchiuse in un'istruzione condizionale, pezzo per pezzo, quindi dovresti soddisfare almeno una condizione per compiere un'azione utile o se raggiungi l'ultima riga, quindi sarà return false , il che significa che nessuna delle condizioni previste è stata soddisfatta, che nel mio progetto significa che l'input non era in un formato corretto o previsto, tipo di dati, intervallo, ecc. quindi il metodo non era in grado di continuare l'elaborazione che.

Posso raggiungere lo stesso obiettivo in un paio di modi diversi, ma questo sembra essere più pulito in quanto ho generalmente bisogno di scrivere codice solo per condizioni positive (in realtà non so come dovrebbe Lo chiamo) - a meno che non debba intraprendere un'azione specifica se una determinata condizione non si è verificata. E alla fine otterrò false se il metodo non è in grado di svolgere il suo lavoro - con condizioni reali sul posto la maggior parte delle volte è quasi come un salto alla fine del metodo quando non è possibile passare attraverso un % dichiarazione diif. In realtà è progettato in modo che tu possa passare questo if e dirigerai a una successiva if oa un'istruzione return o è molto improbabile che corrisponda ad altre dichiarazioni di if e salti direttamente al ultima dichiarazione return false .

Ora le mie domande sono:

  1. È un (vero) design a prova di errore, che in questo caso è solo alla ricerca della condizione appropriata per continuare ed è disposto a fallire non appena si fallisce. È corretto o sto mescolando le cose qui? In caso contrario, esiste un termine specifico per questo?
  2. Anche se di recente ho generalizzato questo approccio per tutti i nuovi metodi che ho creato, vorrei sapere se c'è qualche svantaggio o difetto di progettazione che potrebbe mordermi più tardi.
posta Mahdi 26.02.2014 - 13:11
fonte

2 risposte

7

Un design Fail-fast è in realtà la stessa struttura ma con l'ordine inverso per evitare il codice della freccia.

Un design veloce in caso di errore sarebbe:

if ( 'A' !== $a )
    return false;

if ( 'B' === $b ) {
    return 'some thing';
}
if ( 'C' === $c ) {
    return 'some other things';
}
return false;

Meno rientri è una buona cosa.

    
risposta data 26.02.2014 - 14:14
fonte
1

Per quanto riguarda la tua seconda domanda, i miei 2 centesimi sono che i tuoi metodi non dovrebbero restituire nulla se l'input non era nel formato corretto / previsto. Non aver paura di usare le eccezioni per esprimere qualcosa come "non posso lavorare con questo input".

    
risposta data 26.02.2014 - 14:21
fonte

Leggi altre domande sui tag