So che la gestione delle eccezioni è un argomento spesso discusso nel mondo di Java. Ho letto alcuni thread qui e SO pure.
Mi trovo a identificarmi con principi come Non sopprimere o ignorare le eccezioni , Non rilevare le eccezioni di primo livello ed evitare anti-pattern come Log e lancia .
Domanda n. 1, esiste un diverso standard di pratica quando si tratta di applicazioni web? Ad esempio, si tratta di un caso d'uso legittimo per catturare Exception
ai fini della registrazione e poi lanciarlo lo stack?
function void xyz() throws Exception {
try {
} catch (Exception e) {
LOG.error("ERROR: " + e);
throw e;
}
}
function void otherFuncA() throws Exception {
xyz();
}
function void otherFuncB() {
try {
xyz();
} catch (Exception e) {
LOG.error("ERROR: " + e);
throw e;
}
}
Lo trovo molto difficile da accettare come pratica perché sta generando così tanto codice non necessario (vedi otherFuncA
e otherFuncB
), che influenza la funzione chiama in tutti i diversi livelli (DAO, Servizio, Controller, ecc. .)
Domanda n. 2, perdo informazioni su un errore (diciamo che cosa ha causato un NullPointerException
) se lascio che le eccezioni inaspettate, non controllate salgano al livello Controller e poi, SOLO quindi, gestiremo lì (cattura Exception
e getta traccia stack)? A differenza della registrazione immediata e del re-lancio (visto sopra).
Ovviamente, verificherò ancora i tipi di eccezione specifici laddove applicabile.
Sembra che la traccia dello stack sia spesso un indicatore migliore di ciò che è andato storto rispetto a quale campo specifico stava causando un errore ... Sono davvero interessato all'input di sviluppatori più esperti e alle best practice / reasoning che guidano la tua eccezione la manipolazione.