Ho letto il consiglio su questa domanda su come deve essere gestita un'eccezione il più vicino possibile al punto in cui viene sollevata.
Il mio dilemma sulla miglior pratica è se si dovrebbe usare un try / catch / finally per restituire un enum (o un int che rappresenta un valore, 0 per errore, 1 per ok, 2 per avvertimento ecc., a seconda sul caso) in modo che una risposta sia sempre in ordine, o si debba lasciare passare l'eccezione in modo che la parte chiamante possa occuparsene?
Da quello che posso raccogliere, questo potrebbe essere diverso a seconda del caso, quindi il consiglio originale sembra strano.
Ad esempio, su un servizio web, si vorrebbe sempre restituire uno stato ovviamente, quindi qualsiasi eccezione deve essere gestita sul posto, ma diciamo che all'interno di una funzione che pubblica / riceve alcuni dati tramite http, tu vorrebbe l'eccezione (ad esempio nel caso di 404) per passare semplicemente a quella che l'ha licenziata. Se non lo fai, dovresti creare un modo per informare la parte chiamante della qualità del risultato (errore: 404), così come il risultato stesso.
Sebbene sia possibile provare a catturare l'eccezione 404 all'interno della funzione helper che ottiene / pubblica i dati, dovresti? È solo io che uso un piccolo intento per indicare gli stati nel programma (e documentarli in modo appropriato, ovviamente), e quindi utilizzare queste informazioni per scopi di convalida dell'idoneità (tutto ok / gestione degli errori) all'esterno?
Aggiornamento: mi aspettavo un'eccezione fatale / non fatale per la classificazione principale, ma non volevo includerla per non pregiudicare le risposte. Permettetemi di chiarire di che cosa si tratta: gestire le eccezioni lanciate, non lanciare eccezioni. Qual è l'effetto desiderato: rileva un errore e prova a ripristinarlo. Se il recupero non è possibile, fornire il feedback più significativo.
Ancora una volta, con l'esempio http get / post, la domanda è, dovresti fornire un nuovo oggetto che descriva cosa è successo al chiamante originale? Se questo helper si trovasse in una libreria che stai usando, ti aspetteresti che fornisca un codice di stato per l'operazione o lo includerai in un blocco try-catch? Se si sta progettando , fornire un codice di stato o generare un'eccezione e lasciare che il livello superiore lo traduca in un codice / messaggio di stato?
Sintesi: Come scegli se un pezzo di codice anziché produrre un'eccezione, restituisce un codice di stato insieme ai risultati che potrebbe produrre?