Ho letto i consigli su questa domanda su come un'eccezione dovrebbe essere trattata il più vicino possibile a dove viene sollevata.
Il mio dilemma sulla migliore pratica è se si debba usare un tentativo / cattura / infine per restituire un enum (o un int che rappresenta un valore, 0 per errore, 1 per ok, 2 per avviso ecc., A seconda del caso) in modo che una risposta è sempre in ordine o si dovrebbe lasciare passare l'eccezione in modo che la parte chiamante la gestisca?
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 trattata sul posto, ma diciamo all'interno di una funzione che pubblica / ottiene alcuni dati tramite http, si vorrebbe eccezione (ad esempio nel caso di 404) per passare solo a quello che l'ha sparato. In caso contrario, dovresti creare un modo per informare la parte chiamante della qualità del risultato (errore: 404), nonché del risultato stesso.
Sebbene sia possibile provare a rilevare l'eccezione 404 all'interno della funzione di supporto che ottiene / pubblica i dati, dovresti? Sono solo io che uso un smallint per indicare gli stati nel programma (e documentarli in modo appropriato ovviamente), e quindi usare queste informazioni per scopi di convalida della sanità (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. Vorrei chiarire di cosa si tratta: gestire le eccezioni generate, non generare eccezioni. Qual è l'effetto desiderato: rileva un errore e prova a recuperarlo. 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 fosse in una libreria che stai usando, ti aspetteresti che ti fornisca un codice di stato per l'operazione o lo includeresti in un blocco try-catch? Se lo stai progettando , forniresti un codice di stato o lanci un'eccezione e permetteresti al livello superiore di tradurlo in un codice / messaggio di stato?
Sinossi: Come scegli se un pezzo di codice invece di produrre un'eccezione, restituisce un codice di stato insieme a tutti i risultati che può produrre?