Come lavorare con un motivo di errore [duplicato]

0

Immagina di avere un metodo come User::validate($data) , e principalmente lo sviluppatore si aspetta solo che restituisca un valore booleano ( true significa "ok, convalidato con successo"). Ma, in alcuni casi specifici, ha bisogno di controllare perché la convalida non è riuscita. Qual è il modo migliore per controllarlo?

Ho pensato nei seguenti modi:

  1. Utilizza un argomento come User::validate($data, $throwsException = false) che quando true , genera un'eccezione se fallisce - invece di restituisce false ;
  2. Genera sempre un'eccezione. Quindi lo sviluppatore deve preoccuparsi di rilevare le eccezioni di questo metodo - personalmente non mi piace;
  3. Invece di restituire un valore booleano, restituisce una stringa o const (come FAIL_INVALID_NAME ), ma usa true come successo - o un altro const, come SUCCESS ;
  4. Crea un metodo aggiuntivo come User::validateWithException($data) che, se fallisce, genera un'eccezione invece di restituire false ;
  5. Crea un metodo aggiuntivo come User::validateReason($data) che restituisce una stringa con il risultato della convalida, ad esempio fail:invalid-name o success ;
  6. Crea un metodo aggiuntivo come User::getLastError() che restituirà una stringa o const con l'ultimo errore occorso sulla classe User , come dopo il metodo di validazione;
posta David Rodrigues 13.07.2015 - 14:41
fonte

1 risposta

1

Alcuni dei tuoi casi sopra suggeriscono di lanciare un'eccezione quando una convalida fallisce. Questo in genere non è raccomandato in quanto le eccezioni dovrebbero essere riservate per casi eccezionali (ad es. Servizio non disponibile, timeout, ecc.) E non per il normale flusso del programma. Inoltre, le eccezioni sono in genere operazioni costose.

Le convalide dovrebbero fallire quando le condizioni non sono soddisfatte e dovrebbero restituire valori che lo indicano.

In base alla tua domanda su come dovrebbe essere, un'opzione potrebbe essere quella di aggiornare il tuo input e output in oggetti con alcune proprietà. Forse qualcosa come:

ValidationRequest

  • $ dati
  • $ StopOnFirstFailure
  • Altro comportamento di controllo che controlla le proprietà

ValidationResponse

  • $ Successo
  • $ FailureReasons

Dai un'occhiata a uno dei tanti framework di validazione disponibili e vedrai come vengono utilizzati questi pattern.

    
risposta data 13.07.2015 - 15:12
fonte

Leggi altre domande sui tag