2016-05-12 13 views
1

Ich habe eine Feder-Anwendung erstellt, in der ich log4j für die Protokollierung implementiert habe. Ich habe mehr als 300 Fehler (Ausnahmen) in meiner Anwendung. Ich habe für jeden Fehler individuelle benutzerdefinierte Ausnahmen erstellt. Diese Klassen tun nichts als Fehlermeldungen zurückgeben.Ist es notwendig, benutzerdefinierte Ausnahmen für jeden Fehler zu erstellen

Gründe einzelne Ausnahmen zu erstellen:

  1. Entwickler sollten alle Fehlerbehandlung Situationen nicht zu kurz, wenn ich Ausnahme erstellen es Fehler standardmäßig zeigen, werden sie handhaben müssen, um die Situation zu handhaben.
  2. Während der Protokollierung wird es mir mehr erläutern, wenn ich durch Protokoll gehe, wenn ich individuelle benutzerdefinierte Ausnahmen für meine Fehlerszenarien erstellen.

Jetzt frage ich mich:

  1. Ist es notwendig, einzelne Benutzer definierte Ausnahmen für jeden Fehlerszenario zu erstellen?
  2. Wie die meisten Menschen besser mit Fehlern und benutzerdefinierten Ausnahmen umgehen?
+1

1. ** Nein **. 2. Indem Sie die Fehler auf eine Weise klassifizieren, die für einen Entwickler sinnvoll ist. Der Stack-Trace informiert Sie darüber, wo die Ausnahme aufgetreten ist. Daher ist nicht klar, warum Sie jemals 300 benutzerdefinierte Exceptions erstellen möchten. –

+0

Es ist wirklich nicht notwendig, so viele benutzerdefinierte Ausnahmen zu erstellen. Sie werden wahrscheinlich feststellen, dass vorhandene Ausnahmeklassen ausreichen, um sie anstelle vieler der von Ihnen erstellten Ausnahmen zu verwenden. Sie können diese dann genauer machen, indem Sie für jede Ausnahme verschiedene Nachrichten und Ursachen an den Konstruktor übergeben. https://www.cs.cmu.edu/~pattis/15-1XX/15-200/lectures/exceptions/lecture.html https://docs.oracle.com/javase/7/docs/api/java/ lang/Ausnahme.html –

Antwort

2

Ich wäre nett, wenn Sie Ihre Frage mit einem Beispiel aktualisieren könnten. Ich habe jetzt eine ganze Reihe von Unternehmensanwendungen erstellt, und das Motto, dem ich normalerweise folge, ist, dass Ihr Ausnahmetyp die richtige Fehlerkategorie erklärt und sicherstellt, dass Ihre Ausnahmebedingung richtig erklärt, was falsch gelaufen ist. Sie sollten keine benutzerdefinierten Ausnahmen erstellen, es sei denn, sie sind erforderlich, um den Typ der Ausnahme, die Sie haben, ordnungsgemäß zu klassifizieren. Hier ist ein gutes Beispiel von mabbas:

When should we create our own java exception classes?

0

Ich glaube, Ihre Frage nicht in einer guten Art und Weise beantwortet werden kann; Hier geht es eigentlich darum, unterschiedliche Meinungen zu diskutieren. Meine Meinung: Solange Ihre individuellen Ausnahmen alle gut definiert sind (und nicht überlappen in ihrer Bedeutung); jeder hat gute Nachrichten und kommt mit den Dingen, die Sie brauchen, um später Probleme zu debuggen ... dann: keine Sorge. Dafür sollen Ausnahmen verwendet werden. Eine weitere (und benutzerdefinierte) Ausnahme ermöglicht auch eine spezifischere und feingranularere Fehlerbehandlung.

Aber wenn die Verwendung von Ausnahmen mit erheblichen Kosten verbunden ist (in unserer Umgebung senden wir Ausnahmen von "unabhängigen" Knoten A zu Knoten B ... und jetzt müssen Sie auf einmal sicherstellen, dass A, B sind auf übereinstimmenden Code-Ebenen) Dinge sind anders. Dann können Sie sehr sorgfältig überlegen, welche Architektur Ihnen den größten "Return on Investment" bietet.

0

Scheint wie Overkill 300 Fehler für 300 Ausnahmen zu erstellen. Was ich getan habe, war unsere eigene HttpErrorException Klasse zu erstellen, die den HTTP-Fehler enthält, den wir zurückgeben möchten. Entwicklern wurde geraten, einen dieser zu werfen, wenn sie auf eine Ausnahme oder einen Fehler stießen. Wenn eine Exception durchgebrannt ist, die keine der neuen HttpErrorExceptions war, dann wird eine 500 zurückgegeben. Wir haben andere Ausnahmen nicht in HTTP-Fehler umgewandelt, weil ich der Meinung war, dass es falsch ist anzunehmen, dass jedes Auftreten einer bestimmten Ausnahme immer zu einem bestimmten HTTP-Fehler zurückverfolgt wird. Der Grund hierfür ist, dass es viele Abhängigkeiten gibt (andere Bibliotheken, die wir verwenden) und sie könnten jeden Typ von Ausnahme auslösen, der für irgendeine bestimmte Situation nicht gut auf den HTTP-Fehler zurückgreift, den wir im Sinn hatten. Ich bin also eher explizit.

Hier ist ein zerknirschtes Beispiel für eine typische Nutzung.

Account getAccount(String id){ 
    Account a = null; 
    try{ 
     a = accountRepo.findById(id); 
    catch(Exception e) { 
     String error = "Got exception while trying to get Account from db."; 
     logger.(error, e); 
     throw new HttpErrorException(500, error); 
     //or throw new HttpErrorException(HttpStatus.INTERNAL_SERVER_ERROR, error); 
    } 
    throw404IfNull(a); 
    return a; 
} 

Die throwIf404IfNull ist nur eine einfache Methode, die wir if Aussagen in unserem Code zu reduzieren erstellt. Wir haben einige dieser Methoden und unser Code bleibt frei von if Aussagen, die sonst Unit-getestet werden würde.

void throw404IfNull(Object obj){ 
    if(obj == null) { 
     throw new HttpErrorException(400, "Object was not found"); 
    } 
} 

Wir verwenden Spring Ausnahmebehandlung Fähigkeiten all HttpErrorException ‚s zu einem schönen gut formatierte HTTP-Fehler mit dem Fehlerstatus zuzuordnen, die in der Ausnahme.

Verwandte Themen