2010-12-12 18 views
9

Es ist eine Frage über die beste .net Praxis. Ich habe immer gefangen und gespeicherten Informationen über Ausnahmen in allen meinen Web-und Fensteranwendungen Formen wie folgt:Wie behandelt man Ausnahmen?

  1. jede Methode mit try catch (Exception Ausnahme) Surrounded
  2. Für jede Schicht mit Ausnahme vordere Schicht, warf Ausnahme der Ebene über
  3. In der Front-Schicht protokolliert die Ausnahme zu einer Protokolldatei (in der Regel mit log4config.dll) und eine benutzerfreundliche Nachricht an den Benutzer präsentiert.

Ist dies der beste Weg, um Ausnahmen zu behandeln? Oder sollte ich in meinen nächsten Projekten etwas anderes machen?

+0

Was meinst du mit 1.Surrounded jede Methode mit try catch (Exception Ausnahme) – Stilgar

+0

try {// do something} catch (Exception Ausnahme) {// etwas tun} – InfoLearner

Antwort

2

Der folgende Code ist problematisch, weil es den ursprünglichen Stack-Trace für e überschreibt, die Probleme schwerer zu diagnostizieren macht:

public void Foo() { 
    try { 
     Bar(); 
    } catch(Exception e) { 
     throw e; // re-throw; overwrites original stacktrace in 'e' 
    } 
} 

Der folgende Code nicht das oben Stacktrace überschreibt Problem hat, ist aber immer noch unnötig ausführliche :

public void Foo() { 
    try { 
     Bar(); 
    } catch(Exception e) { 
     throw; // re-throw; preserves original stacktrace in 'e' 
    } 
} 

Beide wären besser geschrieben als unten. Dies liegt daran, wenn das einzige, was Sie in Ihren Fang Block tun, ist die Ausnahme erneut zu werfen, gibt es keine Notwendigkeit gibt, die catch-Block überhaupt zu schreiben:

public void Foo() { 
    Bar(); 
} 
+4

genau zu sein, „werfen e "ist schlimmer, weil es den Stapel verliert und einen neu erstellt, sollte es einfach" werfen "ohne irgendein Argument. –

+0

So beweisen, wie einfach es für gut gemeinten Code ist, die Dinge noch schlimmer zu machen :) –

+0

@Simon - guter Fang. Vielen Dank. Ich habe meine Antwort aktualisiert. –

6

bekommen möchte ich hinzufügen, nicht mehr als 1 & 2, es sei denn ich etwas bestimmten Grund hatte; zum Beispiel um die Nachricht zu verändern (umschlingen); Es besteht keine Notwendigkeit, da die Ausnahmen ohnehin nach oben gehen. Und fälschlicherweise können Sie versehentlich die wichtige Stack-Spur entfernen (throw; vs throw ex; - die erste wird bevorzugt).

-1

Hier ist, wie NICHT zu Ausnahmen behandeln.

public void method1(){ 
    try{ 
     .... 
     // all the code goes here 
     // declare any helper methods throw throwable 
     // eg: private boolean check1() throws Throwable{ ...} 
     .... 
    }catch(Throwable t){ 
     System.out.println("oops...error...good luck debugging. "); 
    } 
} 
+0

Niemand kann eine fauligere Möglichkeit vorschlagen, mit Ausnahmen umzugehen :) – rana

Verwandte Themen