2017-10-27 2 views
0

Wie ich verstanden habe, verwenden wir Guava Preconditions, um schnell zu versagen, bevor einige Objekte Zustände ändern (eine nette Antwort here von Stackoverflow). Und das ist gut. Es werden jedoch Runtime-Ausnahmen ausgelöst, und dies ist nicht die bevorzugte Ausnahme für den Benutzer einer Anwendung (500 Fehler usw.). Also brauche ich Sie, um mir beim Design zu helfen.Guava Voraussetzungen RuntimeExceptions Handhabung

Ich habe eine Schnittstelle, die viele Methoden deklariert. Jede Methode hat Argumente, die kontrolliert werden müssen (zB: nicht null). So in der Implementierungsklasse I Befehle verwenden wie folgt aus:

Preconditions.checkNotNull(fooObj); 

jedoch das Programm diese API aufrufen könnte aufgrund einer Laufzeitausnahme abstürzen, ist, dass in diesem Fall Nullpointer.

Wie gehen Sie mit diesen ungeprüften Ausnahmen um?

Vielen Dank.

-------- EDIT Die App Schichten:

  • Data Access Layer

  • API die Methoden erklärt, die DTO

  • Verfahren auszutauschen, um die API-Implementierung und Überprüfe Argumente mit Guava

  • Webservice in Abhängigkeit von der Prozessschicht

+1

Ein Programm, das eine Ausnahme auslöst, stürzt nicht ab. Es löst eine Ausnahme aus. Es scheint, dass Sie eine Web-App schreiben. Dadurch wird dem Benutzer eine Fehlerseite angezeigt. Sie können auf dieser Fehlerseite zeigen, was Sie wollen.Aber eine solche Ausnahme zeigt, dass Ihr Code einen Fehler hat. Was Sie also tun müssen, ist Ihren Code zu reparieren, um diesen Fehler zu vermeiden und somit zu vermeiden, dass diese Fehlerseite zuerst angezeigt wird. –

+0

Absolut, eine 500 zeigt einen Fehler im Code zu beheben. Auf welcher Ebene ist es also am bequemsten, diese Ausnahme zu behandeln? Zum Beispiel in der Methode, die die API aufruft, die eine Ausnahme zum Einfangen und Nichtüberprüfen erzwingen muss? – Farah

+0

Sie haben nichts über Ihre App und ihre Layer gesagt. Ich weiß nicht, welche Art von App es ist, welche Technologie es verwendet, welche Schichten es hat. Wenn es eine traditionelle Webapp ist, sollte es überhaupt nicht gefangen werden. Lass es einfach blasen, bis der Webcontainer eine Fehlerseite anzeigt. –

Antwort

5

Ein Ausfall einer Voraussetzung bedeutet, dass Ihr Programm einen Fehler hat. Benutzer sollten diese nicht finden, es sei denn, sie haben einen Fehler in Ihrem Programm gefunden.

Ihr Programm sollte im Allgemeinen zeigen eine Art Fehlermeldung an Benutzer im Falle eines Fehlers, aber mehr auf den Punkt, sollten Sie informiert werden, damit Sie den Fehler in erster Linie beheben können.

+0

Ah! Sie meinen also, dass die Eingabedaten frühzeitig abgelehnt werden mussten, oder? Zum Beispiel das Formular, das eine Anfrage an die Komponente sendet, indem es die Validierung der Felder durchführt? Wie wäre es mit einer SOA-Architektur ohne GUI? Danke – Farah

+0

Wenn Sie Benutzereingaben überprüfen, sollten Sie keine 'Preconditions' oder Laufzeitausnahmen verwenden. Sie sollten es anders handhaben. –

2

Sie behandeln sie, indem Sie Ihr Programm so gestalten, dass es nie passiert. Diese Vorbereitungsmethoden sollen Fehler aufspüren und dabei helfen, genau zu finden, wo die Ursache liegt, und nicht, Benutzereingaben zu verifizieren.

Wenn Sie nur die API definieren, nicht die Programme, die sie aufrufen, dann behandeln Sie sie, indem Sie den Personen in Ihrer Dokumentation sagen, dass die fraglichen Argumente nicht null sein dürfen und das Problem der Erfüllung dieser Anforderung bestehen bleibt Sie.

Wenn Sie auch ein aufrufendes Programm schreiben, versuchen Sie zuerst, sicherzustellen, dass die Ausnahme nie passiert. Sie können den Anruf auch in einen try/catch Block setzen, um die NullPointerException abzufangen, aber der Zweck des catch blocks sollte darin bestehen, Ihnen eine bessere Benachrichtigung über den Fehler zu geben (z. B. eine Protokollnachricht aufzuzeichnen oder einen Alarm auszulösen) und die auslösenden Umstände um mehr anmutig herunterzufahren oder eine benutzerfreundlichere Fehlermeldung zu geben. Der Versuch, sich von dem Fehler zu erholen, sollte mit großer Vorsicht oder gar nicht durchgeführt werden - wenn diese Art von Fehler auftritt, ist etwas schief gelaufen, das Sie nicht vorhergesehen haben, und die richtige Art der Wiederherstellung ist möglicherweise nicht vorhersehbar.