Indirizzerò maggiormente la mia risposta a ciò che viene dopo un'eccezione: a cosa serve e come dovrebbe comportarsi il software, cosa dovrebbero fare gli utenti con l'eccezione? Una grande tecnica che ho riscontrato all'inizio della mia carriera è stata quella di segnalare sempre problemi ed errori in 3 parti: contesto, problema e soluzione. L'uso di questa dicipline modifica enormemente la gestione degli errori e rende il software notevolmente migliore per gli operatori.
Ecco alcuni esempi.
Context: Saving connection pooling configuration changes to disk.
Problem: Write permission denied on file '/xxx/yyy'.
Solution: Grant write permission to the file.
In questo caso, l'operatore sa esattamente cosa fare e su quale file deve essere interessato. Sanno anche che le modifiche al pool di connessioni non hanno avuto e dovrebbero essere ripetute.
Context: Sending email to 'abc@xyz.com' regarding 'Blah'.
Problem: SMTP connection refused by server 'mail.xyz.com'.
Solution: Contact the mail server administrator to report a service problem. The email will be sent later. You may want to tell 'abc@xyz.com' about this problem.
Scrivo sistemi lato server e i miei operatori sono generalmente esperti di tecnologia di prima linea. Scriverei i messaggi in modo diverso per i software desktop che hanno un pubblico diverso ma includono le stesse informazioni.
Diverse cose meravigliose accadono se si usa questa tecnica. Lo sviluppatore di software è spesso nella posizione migliore per sapere come risolvere i problemi nel proprio codice, quindi codificare le soluzioni in questo modo mentre si scrive il codice è di enorme beneficio per gli utenti finali che sono in svantaggio nel trovare soluzioni poiché spesso mancano informazioni su cosa stava facendo esattamente il software. Chiunque abbia mai letto un messaggio di errore Oracle saprà cosa intendo.
La seconda cosa meravigliosa che viene in mente è quando ti ritrovi a provare a descrivere una soluzione nella tua eccezione e stai scrivendo "Controlla X e se A allora B altro C". Questo è un segno molto chiaro ed evidente che la tua eccezione è stata controllata nel posto sbagliato. Il programmatore ha la capacità di confrontare le cose nel codice, quindi le istruzioni "se" devono essere eseguite nel codice, perché coinvolgere l'utente in qualcosa che può essere automatizzato? Le probabilità sono che è dal profondo nel codice e qualcuno ha fatto la cosa pigro e gettato IOException da qualsiasi numero di metodi e catturato i potenziali errori da tutti loro in un blocco di codice chiamante che non si può descrivere adeguatamente cosa è andato storto, quello che la specificacontesto è e come risolverlo. Questo ti incoraggia a scrivere errori di grana più fine, a catturarli e gestirli nel posto giusto nel tuo codice in modo da poter articolare correttamente i passi che l'operatore dovrebbe prendere.
In una società avevamo operatori di prim'ordine che conoscevano molto bene il software e mantenevano il loro "libro di istruzioni" che aumentava la segnalazione degli errori e suggeriva soluzioni. Per riconoscerlo, il software ha iniziato a includere collegamenti wiki al runbook in eccezioni, in modo che fosse disponibile una spiegazione di base, nonché collegamenti a discussioni e osservazioni più avanzate da parte degli operatori nel tempo.
Se hai avuto la dicipline per provare questa tecnica, diventa molto più ovvio come dovresti nominare le tue eccezioni nel codice quando crei la tua. NonRecoverableConfigurationReadFailedException diventa un po 'una scorciatoia per ciò che stai per descrivere in modo più completo all'operatore. Mi piace essere prolisso e penso che sarà più facile da interpretare per il prossimo sviluppatore che tocca il mio codice.