Ausnahmebehandlung in .net Web-Anwendungen

8

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.

    
Jordan Arron 11.09.2008, 07:45
quelle

6 Antworten

11

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:

aku 11.09.2008, 07:49
quelle
7

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.

    
Wheelie 11.09.2008 08:01
quelle
2

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.

    
Magnus Akselvoll 11.09.2008 07:53
quelle
1

Könnte mehr über die Ausnahmebehandlung im Allgemeinen als ASP.NET sachic sein, aber:

  • Versuchen Sie, Ausnahmen so nah wie möglich abzufangen die Ursache so gut wie möglich kann so viele Informationen aufzeichnen (protokollieren) über die Ausnahme wie möglich.
  • Fügen Sie eine Form von Fang alle, zuletzt Ausnahmebehandler bei der Einstiegspunkte zu Ihrem Programm. Im ASP.NET könnte dies sein Fehlerbehandlung auf Anwendungsebene
  • Wenn Sie nicht wissen, wie Sie eine Exception "richtig" handhaben können, lassen Sie sie bis zum catch all handler übergehen, wo Sie sie als "unerwartete" Ausnahme behandeln können.
  • Verwenden Sie die Try *****-Methoden in .NET für Dinge wie Zugang zu einem Wörterbuch. Dies hilft, größere zu vermeiden Leistungsprobleme (Ausnahme Handhabung ist relativ langsam) wenn Sie Wirf mehrere Ausnahmen in a Schleife.
  • Verwenden Sie die Ausnahmebehandlung nicht für steuere deine normale Logik Programm, z.B. Verlassen einer Schleife über eine throw-Anweisung.
Ash 11.09.2008 08:03
quelle
1

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:

  • "Ihre Datei ist zu groß. Maximum Dateigröße ist 5mb. "
  • "Dein Bild ist is zu groß. Maximale Abmessungen sind 1200x1200. "
  • "Dein Album ist voll. Die maximale Speicherkapazität beträgt 1 GB. "
  • "Es gab einen Fehler bei Ihrer hochladen. Unsere Hampster sind unglücklich. Bitte komm später wieder. "

usw. usw.

Es gibt keine Einheitsgröße für die Ausnahmebehandlung.

    
Todd Smith 23.10.2008 17:23
quelle
0

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 .

    
samjudson 11.09.2008 07:49
quelle

Tags und Links