Ich gebe es zu: Ich kümmere mich nicht um zu viele Ausnahmen. Ich weiß, dass ich mehr tun sollte, aber ich kann mir nie den Kopf darum machen, wo ich anfangen und wo ich aufhören soll. Ich bin nicht faul. Weit davon entfernt. Es ist, dass ich mit der Ausnahmebehandlungsambivalenz überreizt bin. Es scheint nur, dass es selbst in der kleinsten App scheinbar unendlich viele Orte gibt, an denen die Ausnahmebehandlung angewendet werden kann und es sich wie ein Overkill anfühlt.
Ich bin durch sorgfältiges Testen, Validieren und stilles Gebet durchgekommen, aber das ist ein schlechter Programmierunfall, der darauf wartet, passiert zu werden.
Was sind Ihre Ausnahmen für die Handhabung von Best Practices? Insbesondere wo sind die offensichtlichsten / kritischsten Orte, an denen Ausnahmen gehandhabt werden sollten und wo sind Orte, an denen sie berücksichtigt werden sollten?
Entschuldigung für die vage Frage, aber ich möchte das Buch wirklich ein für allemal schließen.
Microsoft Patterns & amp; Das Practices-Team hat die Best Practices des Exception-Managements in die Ausnahmebehandlung des Anwendungsblocks
Event, wenn Sie die Enterprise Library nicht verwenden möchten, empfehle ich Ihnen hoch , ihre Dokumentation zu lesen. Das P & amp; P-Team beschreibt gängige Szenarien und Best Practices für die Behandlung von Ausnahmen.
Um Ihnen den Einstieg zu erleichtern, lese ich folgende Artikel:
ASP.NET-spezifische Artikel:
Die goldene Regel bei der Ausnahmebehandlung lautet:
"Fange nur das, womit du umgehen kannst"
Ich habe zu viele "try-catch" -Blöcke gesehen, bei denen der Fang nichts anderes tut, als die Ausnahme erneut auszulösen. Dies fügt keinen Wert hinzu. Nur weil Sie eine Methode aufrufen, die eine Ausnahme auslösen kann, bedeutet das nicht, dass Sie sich mit der möglichen Ausnahme im aufrufenden Code befassen müssen. Es ist oft völlig in Ordnung, wenn Exceptions den Call-Stack zu einem anderen Code weiterleiten, der weiß, was zu tun ist. In einigen Fällen ist es zulässig, Ausnahmen bis zur Ebene der Benutzerschnittstelle weiterleiten zu lassen und dann die Nachricht für den Benutzer abzufangen und anzuzeigen. Es kann sein, dass kein Code am besten geeignet ist, um zu wissen, wie mit der Situation umgegangen werden soll, und der Benutzer muss die Vorgehensweise bestimmen.
Ich empfehle Ihnen, zunächst eine gute Fehlerseite hinzuzufügen, die alle Ausnahmen abfängt und eine etwas weniger unfreundliche Nachricht an den Benutzer ausgibt. Achten Sie darauf, alle Details der Ausnahme zu protokollieren und diese zu überarbeiten. Lassen Sie den Benutzer wissen, dass Sie dies getan haben, und geben Sie ihm einen Link zurück zu einer Seite, die (wahrscheinlich) funktioniert.
Verwenden Sie dieses Protokoll jetzt, um festzustellen, wo eine spezielle Ausnahmebehandlung eingerichtet werden sollte. Denken Sie daran, dass es nichts nützt, eine Ausnahme zu erfassen, es sei denn, Sie beabsichtigen, etwas damit zu tun. Wenn Sie die obige Seite an Ort und Stelle haben, ist es nicht sinnvoll, Datenbankausnahmen für alle db-Operationen einzeln abzufangen, es sei denn, Sie haben eine bestimmte Methode zur Wiederherstellung an diesem bestimmten Punkt.
Erinnere dich: Das einzige, was schlimmer ist, als keine Ausnahmen zu fangen, ist, sie zu fangen und nichts zu tun. Dies wird nur die wirklichen Probleme verbergen.
Könnte mehr über die Ausnahmebehandlung im Allgemeinen als ASP.NET sachic sein, aber:
Beginnen Sie mit einem globalen Ausnahme-Handler wie Ссылка .
Dann stellt sich die Frage, welche Art von Anwendung Sie schreiben und welche Art von Benutzererfahrung Sie bereitstellen müssen. Je umfangreicher die Benutzererfahrung ist, desto besser ist die Ausnahmebehandlung, die Sie bereitstellen möchten.
Betrachten Sie als Beispiel eine Foto-Hosting-Site, die Festplattenkontingente, Dateigrößenlimits, Bilddimensionenlimits usw. enthält. Für jeden Fehler können Sie einfach "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut". Oder Sie könnten in die detaillierte Fehlerbehandlung kommen:
usw. usw.
Es gibt keine Einheitsgröße für die Ausnahmebehandlung.
Nun sollten Sie auf der grundlegenden Ebene das Ereignis HttpApplication.Error in der Datei Global.asax behandeln. Dies sollte jede Ausnahme protokollieren, die an einem einzelnen Ort auftritt, so dass Sie den Stack-Trace der Ausnahme überprüfen können.
Abgesehen von dieser grundlegenden Ebene sollten Sie idealerweise Exceptions behandeln, von denen Sie wissen, dass Sie sie wiederherstellen können. Wenn Sie beispielsweise erwarten, dass eine Datei gesperrt ist, wäre es eine gute Idee, die IOException zu behandeln und den Fehler an den Benutzer zurückzumelden .
Tags und Links exception-handling asp.net