Fehler-codes innerhalb Ausnahme vs Ausnahmen-Hierarchie
Glaubst du, es ist ok zu verwenden, Fehler-codes innerhalb von exception angeben, Fehler geben?
Bitte werfen Sie einen Blick auf diese code:
public class MyException extends Exception {
public static final String ERROR_CODE_INVALID_NAME = "";
public static final String ERROR_CODE_INVALID_ID = "";
...
private String errorCode;
public MyException(String message, String errorCode) {
super(message);
this.errorCode = errorCode;
}
public String getErrorCode() {
return errorCode;
}
}
Weiß ich, dass es besser ist die Verwendung von enum anstelle von Zeichenfolgen in diesem Beispiel, aber ich bin wirklich besorgt über das Konzept der Fehler-codes. Denken Sie Ausnahmen Hierarchie wäre hier besser? Ich finde keine maßgebliche Quelle, die sagt: Fehler-codes innerhalb Ausnahme ist die anti-pattern.
Thx.
- Sieht aus wie ein Duplikat von stackoverflow.com/questions/446663/....
- Thx, ich sah diese Frage, aber es war nicht eine Diskussion, dass dieser Ansatz grundsätzlich falsch ist (außer die eine Meinung in der ganz am Ende). Ich wollte erhöhen, eine Diskussion genau in die Art und Weise der Richtigkeit eines solchen Ansatzes.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wollen, um anders zu reagieren (im code) je nachdem, was die Ursache der Ausnahme (entweder ein Ungültiger name oder ungültiges id), dann würde ich vorschlagen, mit verschiedenen Ausnahmen.
Wenn nicht, dann brauchen Sie nicht einmal die
getErrorCode()
- Methode, können Sie einfach fügen Sie den Fehlercode in der Nachricht der Ausnahme und der Ausnahme der Ihnen alle Informationen, die Sie brauchen für die Fehlersuche.Fehler-codes sind nützlich, wenn
So, die meisten der Zeit, sehe ich keinen Mehrwert in der Fehler-codes. Ich bevorzuge eine Ausnahme-Hierarchie oder zumindest klare Fehlermeldung, die wirklich nützlich sind, wenn Sie in einer Logdatei (auch 2 Jahre nachdem der Programmierer die Firma verlassen hat).
Wenn Sie Lösungen für Fehler-codes - die Lösung ist nicht schlecht. Betrachten sammeln alle Fehler-codes in einem zentralen repository (eine properties-Datei), so dass Sie tauschen das komplette set leicht:
Aus meiner Erfahrung Ausnahme-codes sind vor allem als information, Nachricht für Benutzer.
Wusste ich nicht, sah noch einmal jemand versuchen zu analysieren Allgemeine exception-Nachricht, um anders reagieren, hängt davon ab, Fehler-code, in der Regel, es geschieht über exception-Hierarchie.
Anderen Seite, könnte es schwierig sein, zu erstellen, neue exception-Unterklasse für jeden einzelnen Fall und dann Ausnahme-codes verwendet werden.
Zum Beispiel, wenn für ein Benutzer-code es nicht meter, warum die Transaktion fehlgeschlagen ist, sollte es rollback es irgendeine Weise, aber für Endanwender ist es wichtig, warum es passiert ist (falsche Parameter, Datenbank-Anbindung oder sonst was).
Also, um zusammenzufassen, wenn Sie ' r erwartet unterschiedliche Möglichkeiten zum Umgang mit verschiedenen Situationen, es ist besser verschiedene exception-Typen, aber wenn Sie behandeln soll einige Probleme in der gleichen Weise, aber nur benachrichtigt den Benutzer über Besondere Ursache ist es einfacher zu mit Hilfe des exception-codes.
Normalerweise verwende ich eine Kombination von beiden.
Müssen Sie Kategorien Ihre Ausnahmen und machen eine design-Entscheidung.
Zum Beispiel, können Sie Parameter verwenden, wie beispielsweise den Ursprung der Ausnahme, Art, Auswirkungen und Umgang zu kategorisieren Ausnahme. Wenn die Ausnahmen fallen in die gleiche Kategorie, error-codes verwendet innerhalb. Verwenden Sie die Hierarchie für die Ausnahme fallen in verschiedene Kategorien.
Wenn Sie gewählt haben, Exception-Handling ein wichtiger parameter, Sie können wählen zwischen den beiden Optionen basieren auf, wie Sie wollen, Sie zu behandeln:
Performance-Weise Schaffung eines stacktrace von komplexen Ausnahme-Hierarchie ist sehr teuer, sowohl aus Speicher-und Zeit-Aspekte, also, wenn Sie erstellen eine komplexe eigene exception-Hierarchie für etwas, das können Sie lösen, indem Sie 3-4 statischer Fehler-codes... würde ich lieber den Fehler-code-option. Im Allgemeinen bevorzuge ich das arbeiten mit Laufzeit-Ausnahmen (nicht überprüft in der Signatur der Methode) die deffensive Ansatz des fangs kontrolliert Ausnahmen ist etwas out-dated IMO.
int
(oderenum
oder was auch immer). Die meiste Zeit wird damit verbracht, die Schaffung der stack-trace, so, was ich bin versucht zu sagen: vorzeitige Optimierung ist die Wurzel allen übels. Abgesehen davon, dass es meist eine Stil-Frage. 🙂