Ich werde meine Antwort mehr auf das richten, was nach einer Ausnahme kommt: Wofür ist es gut und wie sollte sich Software verhalten, was sollten Ihre Benutzer mit der Ausnahme tun? Eine großartige Technik, auf die ich zu Beginn meiner Karriere gestoßen bin, bestand darin, Probleme und Fehler immer in drei Teilen zu melden: Kontext, Problem und Lösung. Die Verwendung dieser Disziplin verändert die Fehlerbehandlung enorm und verbessert die Benutzerfreundlichkeit der Software erheblich.
Hier sind einige Beispiele.
Context: Saving connection pooling configuration changes to disk.
Problem: Write permission denied on file '/xxx/yyy'.
Solution: Grant write permission to the file.
In diesem Fall weiß der Bediener genau, was zu tun ist und welche Datei betroffen sein muss. Sie wissen auch, dass die Änderungen am Verbindungspool nicht übernommen wurden und wiederholt werden sollten.
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.
Ich schreibe serverseitige Systeme und meine Bediener sind in der Regel technisch versierte First-Line-Support. Ich würde die Nachrichten für Desktop-Software, die eine andere Zielgruppe haben, aber die gleichen Informationen enthalten, anders schreiben.
Wenn man diese Technik anwendet, passieren mehrere wunderbare Dinge. Der Softwareentwickler ist oft am besten in der Lage, die Probleme in seinem eigenen Code zu lösen. Daher ist die Codierung von Lösungen auf diese Weise beim Schreiben des Codes für Endbenutzer von großem Vorteil, die nachteilig Lösungen finden, da ihnen häufig Informationen zu fehlen was genau die Software tat. Jeder, der jemals eine Oracle-Fehlermeldung gelesen hat, weiß, was ich meine.
Die zweite wunderbare Sache, die mir einfällt, ist, wenn Sie versuchen, eine Lösung in Ihrer Ausnahme zu beschreiben, und Sie schreiben "Check X und wenn A, dann B, dann C". Dies ist ein sehr klares und offensichtliches Zeichen dafür, dass Ihre Ausnahme an der falschen Stelle überprüft wird. Sie, der Programmierer, haben die Fähigkeit, Dinge im Code zu vergleichen. Wenn Anweisungen im Code ausgeführt werden sollen, warum sollte der Benutzer dann an etwas beteiligt sein, das automatisiert werden kann? Die Wahrscheinlichkeit ist groß, dass es sich um einen tieferen Code handelt, und jemand hat das Faule getan und IOException von einer beliebigen Anzahl von Methoden geworfen und potenzielle Fehler von allen in einem Block von aufrufendem Code aufgefangen, der nicht ausreichend beschreiben kann, was falsch gelaufen ist, was der spezifische Code istKontext ist und wie man es behebt. Dies ermutigt Sie, feinere Körnungsfehler zu schreiben, diese zu erfassen und an der richtigen Stelle in Ihrem Code zu behandeln, damit Sie die Schritte, die der Bediener ausführen sollte, richtig artikulieren können.
In einem Unternehmen hatten wir erstklassige Betreiber, die die Software sehr gut kennengelernt und ein eigenes "Run Book" geführt haben, das unsere Fehlerberichte und Lösungsvorschläge vervollständigte. Um dies zu erkennen, hat die Software in Ausnahmefällen Wiki-Links zum Runbook hinzugefügt, sodass eine grundlegende Erklärung zur Verfügung stand sowie Links zu weiterführenden Diskussionen und Beobachtungen der Bediener im Laufe der Zeit.
Wenn Sie die Disziplin hatten, diese Technik auszuprobieren, wird es viel offensichtlicher, wie Sie Ihre Ausnahmen im Code benennen sollten, wenn Sie Ihre eigenen erstellen. NonRecoverableConfigurationReadFailedException wird zu einer Abkürzung für das, was Sie dem Bediener genauer beschreiben werden. Ich mag es, wortreich zu sein, und ich denke, das wird dem nächsten Entwickler, der meinen Code berührt, leichter fallen, ihn zu interpretieren.