Mein Firmenchef sagt, dass ich alles schreiben muss, dh ALLEN Code in Try-Catch-Anweisungen. Jetzt kann ich verstehen, dass hier die Vorgehensweise "Sicher ist sicher" besser ist, aber ist es nicht zu klug zu glauben, dass es bei der Erstellung der Beschriftungen zu einer Ausnahme kommt, wenn die Position des Formulars festgelegt wird? Gab es Fälle, in denen Ausnahmen bei solchen einfachen Operationen vorkamen?
code-reviews
Zypern
quelle
quelle
Antworten:
Nun, das ist etwas übertrieben und führt nur zu verrauschtem Code. Was sind die Vorteile, wenn der gesamte Code (z. B. jede Methode) mit einem Try-Catch-Handler geschrieben wird? In den meisten Fällen muss ein Fehler behoben werden. Oft kann und sollte die Ausnahme überhaupt vermieden werden.
Ein Blick auf den Stack-Trace reicht meistens aus, um die Ursache in Ihrem Code aufzudecken, auch wenn die fehlerhafte Methode den Catch selbst nicht ausführt. Es gibt Zeiten, in denen Entwickler Stack-Traces in Ausnahmebedingungen beschädigen. Dies ist jedoch weitaus häufiger der Fall, wenn Sie über zahlreiche Ausnahmebehandlungsroutinen verfügen. Wie alles: Ein bisschen ist gut, aber zu viel davon ist Gift.
Die Ausnahmebehandlung ist in der Tat ziemlich einfach:
Fang Ausnahmen
Wenn Sie darüber nachdenken, gibt es meistens nur einen Ort, an dem eine auftretende Ausnahme behandelt werden kann. Und so sollte der Handler an diesem Ort sein.
Viele Ausnahmen sollten gar nicht erst ausgelöst werden. Bauen Sie Ihre Kontrollstrukturen also nicht auf die Ausnahmebehandlung auf, sondern vermeiden Sie das mögliche Auftreten von Ausnahmen, wann immer und wo immer dies möglich ist.
Denken Sie daran, frühzeitig zu stürzen, wenn (unwiederbringliche) Probleme auftreten. Das Einfügen des gesamten Codes in try-catch-Anweisungen ist absurd. Vergessen Sie jedoch nicht, ALLE Ausnahmen zu melden und zu protokollieren.
quelle
Absolut ja! Es gibt immer eine Möglichkeit, dass Dinge schief gehen, die Sie nicht vorausgesehen haben. Und "Hühnerherz" ist in diesem Zusammenhang ein lächerlicher Ausdruck. Bei der Softwareentwicklung geht es nicht darum, Ihren Machismo zu beweisen, indem Sie potenzielle Probleme ignorieren.
Was ist eine berechtigte Frage ist , ob es nützlich für Ausnahmen an dem Punkt , wo Ihre Coding - Standards sie haben sagen gefangen werden. Ihre Aussage lautet, dass Sie Try / Catch-Block um jeden Methodenkörper haben müssen, und das ist in der Tat absurd, weil Sie mit einer Ausnahme oft nicht sofort etwas Nützliches tun können, und genau das ist der springende Punkt bei Ausnahmen: Sie können sie zulassen Verteilen Sie den Call-Stack, der an der entsprechenden Stelle behandelt werden soll.
quelle
Ich würde das anders herum machen. Ja, in der Regel ist die Ausnahmebehandlung eine gute Sache, aber können Sie tatsächlich jede mögliche Ausnahme an der Stelle, an der sie abgefangen wird, auf vernünftige Weise behandeln? Manchmal, besonders wenn Sie nicht missionskritische Software schreiben, es ist besser, einfach abstürzen und brennen in einigen halbwegs gesteuert , wenn die Dinge schief gehen.
Wenn Sie nicht hundertprozentig sicher sein können, dass Sie mit jeder einzelnen Ausnahme, die möglicherweise abgefangen wird, fertig sind, ist es wahrscheinlich besser, eine allgemeine Ausnahmebehandlungsroutine zu schreiben, in der die Hauptschleife des Programms eingeschlossen ist - die genaue Vorgehensweise ist offensichtlich Dies hängt davon ab, in welcher Sprache Sie arbeiten. Melden Sie sich dort so detailliert wie möglich über die Ausnahmebedingung an, und speichern Sie den Programmstatus (an einem anderen Ort als in dem Datenspeicher, an dem der Benutzer gerade arbeitet). Beachten Sie, dass an dieser Stelle möglicherweise alle Daten beschädigt sind ), und so weiter. Werfen Sie dann die Ausnahme erneut aus und lassen Sie das Betriebssystem damit umgehen, wie es passt. Seien Sie in diesem Catch-All-Ausnahmehandler auf einen katastrophalen Ausfall vorbereitet. Überprüfen Sie dann nach dem Neustart des Programms, ob dieser Status in irgendeiner Weise nützlich ist, und stellen Sie wieder her, was wiederhergestellt werden kann, wenn dies der Fall ist. und möglicherweise dem Benutzer anbieten, einen Fehlerbericht an Sie zurückzusenden.
quelle
Insgesamt ist die Verwendung von try / catch so viel veraltet, weil catch-Block vom Standpunkt der Ressourcen so teuer ist. Die Verwendung von Try / Catch erinnert mich an das Risikomanagement . Risikomanagement hat zwei Dimensionen:
Wenn Sie jetzt das Haus verlassen, ist es so unwahrscheinlich, dass Ihnen ein Klavier auf den Kopf fällt (vielleicht 0,001%), dass Sie jedoch getötet werden können.
Die Ausnahmebehandlung ist so. Try Block ist nicht teuer. Aber catch-Block ist sehr teuer, da eine Tabelle mit Stack-Trace erstellt und andere Aufgaben ausgeführt werden müssen. Daher sollten Sie bei der Entscheidung über try / catch-Blöcke berücksichtigen, wie oft Sie wahrscheinlich catch block treffen. Wenn Sie unter 10.000 Verwendungen nur 1 Mal getroffen haben, verwenden Sie diese. Wenn es sich jedoch um ein Formular handelt und der Benutzer es wahrscheinlich nicht zu 50% korrekt ausfüllt, sollten Sie es vermeiden, dort einen Try / Catch-Block in Aktion zu setzen.
An Orten, an denen die Wahrscheinlichkeit des Auftretens von Ausnahmen hoch ist, wird empfohlen,
if {} else {}
Blöcke zu verwenden, um das Auftreten von Ausnahmen zu vermeiden. Zum Beispiel, wenn Sie zwei Zahlen teilen möchten, anstatt zu schreiben:du solltest schreiben:
quelle
Sie sollten Try-Catch verwenden, wenn dies angebracht ist, aber bitte, bitte fangen Sie nicht alle Ausnahmen ab und protokollieren Sie sie nicht einmal. An diesem Punkt ist es Code Geruch und schlampige Arbeit.
quelle
Ich persönlich kann keine Ausnahmen ertragen, sie sind SEHR, SEHR, SEHR schwer richtig zu handhaben. Der Versuch, die korrupten Daten zu löschen, ist SEHR, SEHR, SEHR schwer!
http://blogs.msdn.com/b/mgrier/archive/2004/02/18/75324.aspx
http://blogs.msdn.com/b/oldnewthing/archive/2004/04/22/118161.aspx
http://blogs.msdn.com/b/oldnewthing/archive/2005/01/14/352949.aspx
http://www.joelonsoftware.com/items/2003/10/13.html
Wenn Sie nicht jede Funktion wie folgt aufrufen:
Es gibt keine Möglichkeit, an jedem Austrittspunkt richtig aufzuräumen. Ausnahmen sind hart!
Das einzig Gute an Ausnahmen ist, dass die App bei unerwartetem Verhalten abstürzt, wenn Sie sie nicht abfangen.
quelle