Ich denke, ein wichtiger Faktor ist, wer Ihre Service-Kunden sind.
Wenn Ihre Serviceebene nur eine architektonische Grenze zwischen den Ebenen in Ihrem eigenen Projekt ist und sich der Service-Client im selben Vertrauensbereich befindet, können Sie die Dinge lockern und ungeprüfte Ausnahmen auf die Controller-Ebene oder den Service-Client übertragen.
Für öffentlich zugängliche Codes; Service, der von einem Dritten oder Kunden in Anspruch genommen wird. Ich halte es für sauberer, ungeprüfte Ausnahmen mit einer serviceorientierten Ausnahme zu versehen, hauptsächlich aus Sicherheitsgründen, zweitens wegen lockerer Kopplung und sauberer Abstraktion.
Eine Datenschichtausnahme sollte niemals direkt zu einem Endbenutzer einer Webanwendung führen . Es enthält möglicherweise interne Informationen zu Ihrem Schema, Ihren Abfragen, Zeilennummern, Variablen- oder Funktionsnamen usw. Ausnahmen für Endbenutzer können in einer sicheren Einstellung bereinigt werden.
Ein externer Service-Client kümmert sich nicht um Ihre Implementierungsdetails und kann ohnehin keine ungeprüften Ausnahmen behandeln, da es sich um Fehler oder Umgebungsprobleme handelt. In sicheren Anwendungen sind Datenbankfehler einfach nicht sicher genug, um sich zu verbreiten. Dies OracleException - ORA-01234 - ...
könnte die dritte Tabelle sein, die eingefügt wurde. Dem Client sollte erlaubt sein, alle überprüften / erwarteten Ausnahmen, die er behandeln kann, zu behandeln und alles andere als potenziellen Fehlerbericht zu behandeln. Ihr Servicevertrag sollte eine atomare, konsistente, transaktionale Abstraktion sein. Wenn die Ausnahme nicht behoben werden kann, bleibt nur ein Fehlerbericht. Sie haben bereits die Möglichkeit, die Ausnahme zu protokollieren. Warum sollten Sie Ihren Endbenutzer also mit den Details belasten? Ihre App kann überwacht werden, sodass Sie bereits über die nicht aktivierten Ausnahmen informiert sind, bevor die Benutzer sie melden.
Es ist nie in Ordnung, Ausnahmen zu essen , und ich bin auch kein Fan von geprüften Ausnahmen, aber ich bevorzuge einen Plan, der der Art des Gesamtprodukts entspricht.
Der Hauptgrund für die Verwendung der Ausnahmebedingungsumhüllung besteht darin, zu verhindern, dass der Code in der Business-Schicht über jede mögliche Ausnahme im System informiert werden muss . Dafür gibt es zwei Hauptgründe:
Konsistenz: Die deklarierten Ausnahmen werden ganz oben im Aufrufstapel zusammengefasst. Wenn Sie keine Ausnahmen umbrechen, sondern sie weitergeben, indem Sie Ihre Methoden deklarieren, um sie auszulösen, erhalten Sie möglicherweise Methoden der obersten Ebene, die viele verschiedene Ausnahmen deklarieren. Das Deklarieren all dieser Ausnahmen in jeder Methode zum Sichern des Aufrufstapels wird mühsam.
Kapselung: Möglicherweise möchten Sie nicht, dass Ihre Komponenten der obersten Ebene etwas über die Komponenten der untersten Ebene oder die von ihnen ausgelösten Ausnahmen wissen. Der Zweck von DAO-Schnittstellen und -Implementierungen besteht beispielsweise darin, die Details des Datenzugriffs vom Rest der Anwendung wegzuziehen. Wenn Ihre DAO-Methoden SQLException auslösen, muss der Code, der die DAOs verwendet, diese abfangen. Was ist, wenn Sie zu einer Implementierung wechseln, die die Daten nicht aus einer Datenbank, sondern von einem Webdienst liest? Dann müssen Sie DAO-Methoden sowohl RemoteException als auch SQLException auslösen. Und wenn Sie ein DAO haben, das Daten aus einer Datei liest, müssen Sie auch IOException auslösen. Das sind drei verschiedene Ausnahmen, die jeweils an ihre eigene DAO-Implementierung gebunden sind.
Kurz gesagt lautet die Antwort ja!
quelle