Ich habe den Rat zu dieser Frage gelesen, wie eine Ausnahme so nahe wie möglich behandelt werden soll.
Mein Dilemma bei der Best Practice ist, ob man einen Versuch / Fang / Endlich verwenden sollte, um eine Aufzählung zurückzugeben (oder ein Int, das einen Wert darstellt, 0 für Fehler, 1 für OK, 2 für Warnung usw., je nach Fall), damit Eine Antwort ist immer in Ordnung, oder sollte man die Ausnahme durchlaufen lassen, damit der aufrufende Teil sich darum kümmert?
Soweit ich das beurteilen kann, kann dies je nach Fall unterschiedlich sein, sodass der ursprüngliche Rat seltsam erscheint.
Zum Beispiel möchten Sie bei einem Webdienst natürlich immer einen Status zurückgeben, sodass jede Ausnahme sofort behandelt werden muss. Nehmen wir jedoch an, Sie möchten in einer Funktion, die einige Daten über http veröffentlicht / abruft, die Ausnahme (zum Beispiel im Fall von 404), um nur zu dem zu gelangen, der es ausgelöst hat. Wenn Sie dies nicht tun, müssten Sie eine Möglichkeit erstellen, um den aufrufenden Teil über die Qualität des Ergebnisses (Fehler: 404) sowie über das Ergebnis selbst zu informieren.
Obwohl es möglich ist, die 404-Ausnahme innerhalb der Hilfsfunktion abzufangen, die die Daten abruft / veröffentlicht, sollten Sie dies tun? Ist es nur ich, der eine Smallint verwendet, um Zustände im Programm zu kennzeichnen (und sie natürlich angemessen zu dokumentieren) und diese Informationen dann für Zwecke der Überprüfung der geistigen Gesundheit (alles in Ordnung / Fehlerbehandlung) außerhalb zu verwenden?
Update: Ich hatte eine schwerwiegende / nicht schwerwiegende Ausnahme für die Hauptklassifizierung erwartet, wollte diese jedoch nicht einbeziehen, um die Antworten nicht zu beeinträchtigen. Lassen Sie mich klarstellen, worum es bei der Frage geht: Behandeln der ausgelösten Ausnahmen, nicht Auslösen von Ausnahmen. Was der gewünschte Effekt ist: Erkennen Sie einen Fehler und versuchen Sie, ihn zu beheben. Wenn eine Wiederherstellung nicht möglich ist, geben Sie das aussagekräftigste Feedback.
Beim Beispiel http get / post lautet die Frage erneut: Sollten Sie ein neues Objekt bereitstellen, das beschreibt, was mit dem ursprünglichen Anrufer passiert ist? Wenn sich dieser Helfer in einer Bibliothek befindet, die Sie verwenden, würden Sie erwarten, dass er Ihnen einen Statuscode für den Vorgang liefert, oder würden Sie ihn in einen Try-Catch-Block aufnehmen? Wenn Sie es entwerfen , würden Sie einen Statuscode angeben oder eine Ausnahme auslösen und die obere Ebene ihn stattdessen in einen Statuscode / eine Statusnachricht übersetzen lassen?
Synopsis: Wie wählen Sie aus, ob ein Code anstelle einer Ausnahme einen Statuscode zusammen mit den daraus resultierenden Ergebnissen zurückgibt?