Restituisce valori per una funzione di cancellazione in php

1

Sto scrivendo una funzione wrapper per le chiamate al database e sono confuso sul modo migliore per gestire i casi di errore.

La funzione ha solo un argomento, l'id dell'oggetto da eliminare.

Ho gestito due casi di errore:
    1) Se l'oggetto non viene trovato, restituisco false.
    2) Se l'oggetto viene trovato ma l'eliminazione non riesce a causa di qualche eccezione, la prendo e restituisco false.

Devo usare valori di ritorno diversi per le condizioni di cui sopra? C'è un particolare modello di progettazione a cui posso fare riferimento in questa situazione?

    
posta zacurry 25.06.2016 - 11:16
fonte

3 risposte

0

La risposta alla tua domanda è: dipende. Quello che stai facendo in questo momento è chiamato soppressione delle eccezioni, ovvero chiamare un metodo che può lanciare e restituire false quando effettivamente accade. È una buona pratica? È difficile rispondere senza sapere esattamente cosa si desidera dal metodo in cui si sopprime l'eccezione.

Personalmente ho completamente rinunciato a sopprimere le eccezioni solo per il gusto di restituire false quando viene lanciata un'eccezione e costruisco il mio codice sapendolo, ma a volte avere un metodo che è eccezionalmente sicuro potrebbe essere una buona idea.

Ho scoperto che un metodo di lancio di tipi diversi di eccezioni è utile quando si desidera elaborare ogni tipo di eccezione in modo diverso, ad esempio un errore interno del server mentre l'altro può semplicemente indicare che un utente non è autorizzato a eseguire determinate azioni . Quindi l'API del metodo non sono solo i suoi parametri e valori di ritorno, ma anche le eccezioni che il metodo genera.

Con la soppressione degli errori e restituendo false sempre, non hai alcuna opzione per distinguere l'errore interno del metodo, perché è tutto nascosto dietro un valore di ritorno, falso. Ciò non significa necessariamente che non sia un progetto valido.

Tutto sommato, se tutto ciò che vuoi è sapere se un'operazione è andata a buon fine o meno, sopprimere un'eccezione e restituire un flag bool potrebbe essere una buona idea, se vuoi che il sistema reagisca diversamente a diverse eccezioni, stai molto meglio con il lancio del metodo, stai consumando le eccezioni e gli eventi di dispacciamento come reazione a loro.

    
risposta data 25.06.2016 - 12:06
fonte
0

Darei un'occhiata a ciò che sarebbe utile a qualsiasi chiamata al metodo di eliminazione.

Al momento, il codice client che chiama questo metodo vedrà una condizione falsa quando l'elemento non è lì da eliminare o non è in grado di eliminare ...

Come dovrebbe reagire il codice cliente? È importante che il tuo codice cliente faccia qualcosa in entrambi i casi?

Senza sapere a cosa serve l'applicazione, potresti effettivamente restituire true in caso di nulla da eliminare, se il risultato dovesse essere lo stesso.

Potresti anche volere che il codice del tuo cliente reagisca a diverse eccezioni gettate all'interno dell'eliminazione ...

    
risposta data 25.06.2016 - 17:15
fonte
0

La vera domanda qui è "qual è la conseguenza del fallimento?"

Se elimini qualcosa e non c'è, a chi importa? Volevi andarsene comunque.

Se vuoi inserire dati e fallisce, cosa puoi fare? Niente, davvero.

In che modo, o anche se comunichi errori, dipende in gran parte dalla tolleranza d'errore di quella transazione. Cancellare qualcosa che non esiste non è un motivo per lanciare un'eccezione. Restituire true o false è utile solo se esiste una cosa tangibile che un utente può fare afterwords.

Il mancato inserimento o aggiornamento dei dati è un motivo per lanciare un'eccezione, in quanto il computer non è in grado di ripristinarlo e dovresti aver colto il problema con una convalida.

Ora se non riesci a connetterti a un database per cominciare, dovresti sempre lanciare un'eccezione, anche quando elimini qualcosa.

    
risposta data 28.06.2016 - 21:53
fonte

Leggi altre domande sui tag