In meinem Unternehmen erstellen wir eine Webanwendung mit mehreren zentralen Diensten, die wir selbst entwerfen und dann als Schnittstellen angeben. Das heißt, die Schnittstellen sind anwendungsspezifisch und werden dann mit Bibliotheken von Drittanbietern implementiert, die wir im Laufe der Zeit ändern können. Bei Ausnahmen habe ich festgestellt, dass die von unseren Diensten ausgelösten Ausnahmen unsere eigenen anwendungsspezifischen Ausnahmen sein sollten, im Gegensatz zu implementierungsspezifischen Ausnahmen.
Jetzt frage ich mich, wie unsere Ausnahmen strukturiert und miteinander in Beziehung gesetzt werden sollen.
Betrachten Sie zunächst eine generische Ausnahme MyAppException
. Diese Ausnahme weist darauf hin, dass etwas Unerwartetes schief gelaufen ist. Das Beste, was wir tun können, ist, dem Benutzer eine Meldung anzuzeigen, dass etwas schief gelaufen ist und wir daran arbeiten. Der Fehler könnte sein, dass die Datenbank abgestürzt ist oder etwas Ähnliches. Diese Ausnahme würde so ziemlich von allen Methoden ausgelöst, die mit der Datenbank arbeiten.
Zweitens betrachten Sie eine Ausnahme MyAppDuplicateException
. Diese Ausnahme würde darauf hinweisen, dass der Benutzer versucht hat, etwas in der bereits vorhandenen Datenbank zu speichern. Hier können wir eine viel spezifischere Fehlermeldung anzeigen, und diese Ausnahme wird nur von den Methoden ausgelöst, die Datenbankzeilen einfügen oder aktualisieren.
Die Anwendung kann auch andere Ausnahmen enthalten, die denen MyAppDuplicateException
für andere erwartete Fehlersituationen ähneln. Ex MyAppNotFoundException
etc ...
Nun zu meinen Fragen:
- Sollten sich die anderen Ausnahmen erstrecken
MyAppException
? Ich sehe eigentlich keinen Grund dafür, ich habe es gerade an vielen Orten gesehen und frage mich, ob es einen Zweck hat. Der Nachteil davon ist, wie ich sehe, dass sich eine try / catch-Anweisung in diesem Fall nicht um die spezifische Ausnahme kümmern muss. Es kann nur die oberste Ausnahme abfangen und muss aus diesem Grund nicht den spezifischen Fehler behandeln, der so ziemlich der Grund für die spezifische Ausnahme war. - Wenn sich die anderen Ausnahmen nicht erstrecken
MyAppException
, sollteMyAppException
einjava.lang.RuntimeException
? Dies würde nicht erfordern, Code auszuführen, um ihn abzufangen, was für mich natürlich klingt, da der Punkt der Ausnahme darin besteht, zu sagen, dass etwas Unbekanntes passiert ist und der ausführende Code nicht erwartet wird, damit umgehen zu können. Der Code am Einstiegspunkt der Anforderung kann weiterhin eine try / catch-Anweisung enthalten, die abfängtMyAppException
und sicherstellt, dass dem Benutzer eine Nachricht angezeigt wird.
bearbeiten Es steht außer Frage, ob die spezifischen Ausnahmen wie MyAppDuplicateException
überprüft werden sollen oder nicht, die auf jeden Fall überprüft werden sollen.
quelle
IOException
eine Laufzeitausnahme für Datei nicht gefunden sein sollte, wenn die Datei eine Ressource ist , die vorhanden sein sollte. Es ist jedoch eine aktivierte Ausnahme für den Fall, dass ein Benutzer einen bestimmten Dateinamen anfordert, der möglicherweise vorhanden ist oder nicht. Dies gilt insbesondere beim Erstellen von Bibliotheken, für die der Kontext nicht im Voraus bekannt ist.Damit meinen Sie Ausnahmen, die durch Ihre Implementierung durch Dritte definiert wurden? Richtig?
Wenn diese Art von Ausnahme einen Fehler in Ihrem Programm darstellt, der nicht durch schlechte Benutzereingaben, sondern durch ein Problem mit Ihrem Code verursacht wird, sollte es sich in Java um eine Laufzeitausnahme handeln.
Dies ist eine aktivierte Ausnahme in Java.
Ja.
Ja, das ist richtig.
quelle