Sono bloccato a decidere come gestire le eccezioni nella mia applicazione.
Molto se i miei problemi con le eccezioni derivano da 1) accesso ai dati tramite un servizio remoto o 2) deserializzazione di un oggetto JSON. Sfortunatamente non posso garantire il successo per nessuna di queste attività (interruzione della connessione di rete, oggetto JSON non corretto che è fuori dal mio controllo).
Di conseguenza, se riscontro un'eccezione, la prendo semplicemente all'interno della funzione e restituisco FALSE al chiamante. La mia logica è che tutto ciò che interessa veramente al chiamante è se l'attività ha avuto successo, non perché non ha avuto successo.
Ecco un po 'di codice di esempio (in JAVA) di un metodo tipico)
public boolean doSomething(Object p_somthingToDoOn)
{
boolean result = false;
try{
// if dirty object then clean
doactualStuffOnObject(p_jsonObject);
//assume success (no exception thrown)
result = true;
}
catch(Exception Ex)
{
//don't care about exceptions
Ex.printStackTrace();
}
return result;
}
Penso che questo approccio vada bene, ma sono davvero curioso di sapere quali sono le migliori pratiche per la gestione delle eccezioni (dovrei davvero bolla un'eccezione fino in fondo in uno stack di chiamate?).
In sintesi delle domande chiave:
- Va bene rilevare solo le eccezioni ma non pubblicizzarle o notificarle formalmente al sistema (tramite un registro o una notifica all'utente)?
- Quali sono le migliori pratiche per le eccezioni che non comportano tutto ciò che richiede un blocco try / catch?
Follow Up / Modifica
Grazie per tutto il feedback, ho trovato alcune eccellenti fonti sulla gestione delle eccezioni online:
- Migliori pratiche per la gestione delle eccezioni | O'Reilly Media
- Procedure consigliate per la gestione delle eccezioni in .NET
- Best practice: gestione delle eccezioni (l'articolo ora punta alla copia di archive.org)
- Antipattern per la gestione delle eccezioni
Sembra che la gestione delle eccezioni sia una di quelle cose che variano in base al contesto. Ma soprattutto, si dovrebbe essere coerenti nel modo in cui gestiscono le eccezioni all'interno di un sistema.
Inoltre, fai attenzione al code-rot tramite troppi tentativi o catture o non dare ad un'eccezione il suo rispetto (un'eccezione sta avvertendo il sistema, cos'altro deve essere avvertito?).
Inoltre, questo è un bel commento di m3rLinEz .
Tendo ad essere d'accordo con Anders Hejlsberg e te sul fatto che alla maggior parte dei chiamanti interessa solo se l'operazione ha successo o meno.
Da questo commento emergono alcune domande su cui riflettere quando si tratta di eccezioni:
- Qual è il punto che viene lanciata questa eccezione?
- Come ha senso gestirlo?
- Al chiamante interessa davvero l'eccezione o si preoccupa solo se la chiamata ha avuto successo?
- Forzare un chiamante a gestire una potenziale eccezione è grazioso?
- Stai rispettando gli idomi della lingua?
- Hai davvero bisogno di restituire un flag di successo come booleano? Restituire booleano (o int) è più una mentalità C che Java (in Java gestiresti solo l'eccezione).
- Segui i costrutti di gestione degli errori associati alla lingua :)!