Frage

Ich gebe es zu:Ich kümmere mich nicht um zu viel Ausnahmebehandlung.Ich weiß, dass ich mehr tun sollte, aber ich weiß nie, wo ich anfangen und wo ich aufhören soll.Ich bin nicht faul.Weit davon entfernt.Es liegt daran, dass ich mit der Ambivalenz bei der Ausnahmebehandlung überfordert bin.Es scheint nur, dass es selbst in der kleinsten App scheinbar unendlich viele Stellen gibt, an denen Ausnahmebehandlung angewendet werden kann, und es kann sich wie ein Overkill anfühlen.

Ich bin mit sorgfältigen Tests, Validierungen und stillen Gebeten zurechtgekommen, aber dies ist ein schlimmer Programmierunfall, der darauf wartet, passiert zu werden.

Was sind also Ihre Best Practices für die Ausnahmebehandlung?Wo sind insbesondere die offensichtlichsten/kritischsten Stellen, an denen die Ausnahmebehandlung angewendet werden sollte, und wo gibt es Stellen, an denen sie in Betracht gezogen werden sollte?

Es tut mir leid, dass die Frage vage ist, aber ich möchte das Buch hiermit wirklich ein für alle Mal schließen.

War es hilfreich?

Lösung

Microsofts Patterns & Practices Team einen guten Job Einbeziehung besten Praktiken der Ausnahme-Management in Enterprise Library Ausnahmebehandlung Application Block

Ereignis, wenn nicht Enterprise Library verwenden, I sehr empfehlen Sie ihre Dokumentation zu lesen. P & P-Team beschreibt allgemeine Szenarien und Best Practices für die Behandlung von Ausnahmen.

Um Ihnen den Einstieg empfehle ich folgenden Artikel zu lesen:

ASP.NET bestimmte Artikel:

Andere Tipps

Die goldene Regel mit Ausnahmebehandlung ist:

  

„Nur fangen, was Sie wissen, wie zu handhaben“

Ich habe zu viele Blöcke Try-Catch gesehen, wo der Fang nichts tut, sondern die Ausnahme erneut auslösen. Dies fügt keinen Wert. Nur weil Sie eine Methode aufrufen, die das Potential, eine Ausnahme zu werfen hat, bedeutet nicht, müssen Sie sich mit der möglichen Ausnahme in der anrufenden Code beschäftigen. Oft ist es durchaus akzeptabel Ausnahmen den Call-Stack auf einen anderen Code propagieren bis zu lassen, die etwas wissen zu tun. In einigen Fällen ist es gültig Ausnahmen die Möglichkeit, alle bis auf die Ebene Benutzeroberfläche propagieren zu lassen dann den Benutzer die Nachricht fangen und anzuzeigen. Es könnte sein, dass kein Code bestplatzierte zu wissen, wie die Situation zu handhaben, und der Benutzer muss den Verlauf der Aktion entscheiden.

Ich empfehle Ihnen zunächst eine gute Fehlerseite hinzufügen, die alle Ausnahmen abfängt und druckt eine etwas weniger unfreundlich Nachricht an den Benutzer. Seien Sie sicher, dass alle Details verfügbar von Ausnahme protokollieren und revidieren. Lassen Sie die Benutzer wissen, dass Sie dies getan haben, und geben Sie ihm einen Link zurück zu einer Seite, wird (wahrscheinlich) zu arbeiten.

Verwenden Sie nun, dass das Protokoll zu erkennen, wo besondere Ausnahmebehandlung sollte eingeführt werden. Denken Sie daran, dass es keine Verwendung fängt eine Ausnahme, wenn Sie etwas zu tun mit ihm planen. Wenn Sie die oben genannte Seite eingerichtet haben, gibt es keine Verwendung in Fang Datenbank Ausnahmen einzeln auf allen db Operationen, wenn Sie irgendeine spezifische Art und Weise haben zu diesem bestimmten Punkt zu erholen.

Denken Sie daran: Das einzige, was schlimmer als keine Ausnahmen zu kontrollieren, ist, sie zu fassen und nicht nichts zu tun. Dies wird nur die wirklichen Probleme verbergen.

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

  • Versuchen Ausnahmen so nahe zu fangen die Ursache wie möglich, so dass Sie aufzeichnen können (log), so viele Informationen über die Ausnahme wie möglich.
  • Fügen Sie irgendeine Form von fangen alle, letzte Resort Exception-Handler bei der Einstiegspunkte auf Ihrem Programm. Im ASP.NET dies könnte die sein Anwendungsebene Fehlerbehandlung.
  • Wenn Sie nicht wissen, wie man „richtig“ behandelt eine Ausnahme es Blase bis zum Fang läßt alle Handler, wo Sie es als eine „unerwartete“ Ausnahme behandeln können.
  • Verwenden Sie die Try ***** Methoden in .NET für Dinge wie ein Zugriff auf Wörterbuch. Dies trägt dazu bei großen vermeiden Performance-Probleme (Ausnahme Handhabung ist relativ langsam), wenn Sie werfen ein mehrere Ausnahmen in Mitsprache Schleife.
  • Verwenden Sie keine Ausnahme nicht Handhabung steuern normale Logik Ihrer Programm, z.B. Austritt aus einer Schleife über eine throw-Anweisung.

mit einem globalen Exception-Handler Beginnen Sie wie http://code.google.com/p / Elmah / .

Dann ist die Frage kommt auf, welche Art von Anwendung sind writting Sie und welche Art von User Experience tun müssen, um Sie zur Verfügung stellen. Je reicher der Benutzer erfahren, desto besser Ausnahmebehandlung Sie zur Verfügung stellen möchten.

Als Beispiel ein Foto-Hosting-Website betrachten, die Disk-Quotas hat, Dateigröße Grenzen, Bilddimension Grenzen usw. Für jeden Fehler, den Sie einfach zurückkehren könnte „Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.“ Oder Sie könnten in detaillierter Fehlerbehandlung erhalten:

  • "Die Datei ist zu groß. Maximum Dateigrößen sind 5mb.“
  • "Ihr Bild ist, zu groß. Maximale Abmessungen 1200x1200“.
  • "Album ist voll. Maximale Speicherkapazität 1gb“.
  • "Es gab einen Fehler mit Ihrem hochladen. Unsere Hampsters sind unglücklich. Bitte kommen Sie später wieder. "

usw. etc.

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

Nun auf der sehr einfachen Ebene sollten Sie das HttpApplication.Error Ereignis in der Datei Global.asax werden handhaben. Dies sollte jede Ausnahme protokollieren, die an einen einzigen Ort auftritt, so dass Sie den Stack-Trace der Ausnahme überprüfen können.

Neben dieser grundlegenden Ebene sollten Sie idealerweise Ausnahmen werden Umgang mit dem Sie wissen, dass Sie von ihnen erholen können - zum Beispiel, wenn Sie eine Datei erwarten dann gesperrt werden, könnte die IOException Handhabung und die Berichterstattung über die Fehler zurück an den Benutzer wäre eine gute Idee sein, .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top