Je réponds davantage à ce qui vient après une exception: à quoi cela sert-il et comment le logiciel doit-il se comporter, que doivent faire vos utilisateurs avec l'exception? Au début de ma carrière, une technique géniale a été de signaler les problèmes et les erreurs en 3 parties: contexte, problème et solution. L'utilisation de cette procédure change énormément le traitement des erreurs et améliore considérablement le logiciel pour les opérateurs.
Voici quelques exemples.
Context: Saving connection pooling configuration changes to disk.
Problem: Write permission denied on file '/xxx/yyy'.
Solution: Grant write permission to the file.
Dans ce cas, l'opérateur sait exactement quoi faire et dans quel fichier doit être affecté. Ils savent également que les modifications apportées au regroupement des connexions n'ont pas pris et doivent être répétées.
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.
J'écris des systèmes côté serveur et mes opérateurs bénéficient généralement d'un support technique de premier niveau. J'écrirais les messages différemment pour les logiciels de bureau qui s'adressent à un public différent mais qui incluent la même information.
Plusieurs choses merveilleuses se produisent si l'on utilise cette technique. Le développeur de logiciel est souvent le mieux placé pour savoir comment résoudre les problèmes dans son propre code. Encoder ainsi des solutions de cette manière est extrêmement avantageux pour les utilisateurs finaux désavantagés, car ils manquent souvent des informations sur qu'est-ce que le logiciel faisait exactement. Quiconque a déjà lu un message d'erreur Oracle saura ce que je veux dire.
La deuxième chose merveilleuse qui me vient à l’esprit est que vous essayez de décrire une solution dans votre exception et que vous écrivez «Check X and if A, B else C». Ceci est un signe très clair et évident que votre exception est vérifiée au mauvais endroit. En tant que programmeur, vous avez la capacité de comparer des éléments dans un code. Par conséquent, "si" les instructions doivent être exécutées dans un code, pourquoi impliquer l'utilisateur dans quelque chose qui peut être automatisé? Il y a des chances qu'il est de plus profond dans le code et quelqu'un a fait la chose paresseux et jeté IOException de tout nombre de méthodes et pris les erreurs potentielles de tous dans un bloc de code d' appel qui ne peut pas décrire adéquatement ce qui a mal tourné, ce que le particulierle contexte est et comment y remédier. Cela vous encourage à rédiger des erreurs de grain plus fines, à les capturer et à les manipuler au bon endroit dans votre code afin de pouvoir articuler correctement les étapes que l'opérateur doit suivre.
Dans une entreprise, nous avions des opérateurs de premier plan qui connaissaient très bien le logiciel et conservaient leur propre "livre de travail" qui augmentait nos rapports d'erreurs et nos solutions suggérées. Pour reconnaître cela, le logiciel a commencé à inclure des liens wiki vers le livre d'exécution dans les exceptions afin qu'une explication de base soit disponible, ainsi que des liens vers des discussions et des observations plus avancées par les opérateurs au fil du temps.
Si vous avez eu la dicipline d'essayer cette technique, il devient beaucoup plus évident de nommer vos exceptions dans le code lors de la création de vos propres. NonRecoverableConfigurationReadFailedException devient un raccourci pour ce que vous êtes sur le point de décrire plus en détail à l'opérateur. J'aime être bavard et je pense que ce sera plus facile à interpréter pour le prochain développeur qui manipule mon code.