Fehlercodes innerhalb der Ausnahme vs Ausnahmen hierarchy

9

Glauben Sie, dass es in Ordnung ist, Fehlercodes innerhalb der Exception zu verwenden, um den Fehlertyp anzugeben? Bitte werfen Sie einen Blick auf diesen Code:

%Vor%

Ich weiß, dass es besser ist, enum anstelle von Strings in diesem Beispiel zu verwenden, aber ich bin tatsächlich besorgt über das Konzept der Fehlercodes. Denkst du Ausnahmen hierarry wäre hier besser? Ich kann keine autorisierende Quelle finden, die besagt, dass Fehlercodes innerhalb der Exception anti-pattern sind. Thx.

    
Darkoboar 15.02.2012, 10:33
quelle

5 Antworten

2

Wenn Sie anders (im Code) reagieren wollen, abhängig davon, was die Ausnahme verursacht hat (ungültiger Name oder ungültige ID), würde ich verschiedene Ausnahmen vorschlagen.

Wenn nicht, dann brauchen Sie nicht einmal die getErrorCode() -Methode, Sie können einfach den Fehlercode zu der Nachricht der Ausnahme hinzufügen und die Ausnahme wird Ihnen alle Informationen geben, die Sie zum Debuggen benötigen.

    
ughzan 15.02.2012, 10:53
quelle
8

Fehlercodes sind nützlich, wenn

  • Sie können keine vollständige Fehlermeldung (Geschirrspüler-Anzeige) anzeigen
  • Der Code muss intern verarbeitet werden (einige Logik wird ausgelöst, wenn ein bestimmter Code erscheint oder ein Server einen Fehlercode an den Client sendet, während der Client für die Nachricht verantwortlich ist)
  • wir haben ein großartiges Handbuch und der Benutzer kann den Code verwenden, um umfassende Informationen zu erhalten
  • Der Benutzer muss nicht wissen, was passiert ist, sondern muss sich an den Anbieter wenden

In den meisten Fällen sehe ich keinen zusätzlichen Wert in den Fehlercodes. Ich bevorzuge eine Ausnahmehierarchie oder zumindest eine klare Fehlermeldung, die wirklich nützlich ist, wenn sie in einer Logdatei gefunden wird (selbst 2 Jahre nachdem der Programmierer die Firma verlassen hat).

Wenn Sie Anforderungen für Fehlercodes haben - die Lösung ist nicht schlecht. Ziehen Sie in Betracht, alle Fehlercodes in einem zentralen Repository (einer Eigenschaftendatei) zu sammeln, damit Sie den kompletten Satz problemlos austauschen können:

%Vor%     
Andreas_D 15.02.2012 10:48
quelle
3

Aus meiner Erfahrung werden Ausnahmecodes meistens als Informationsnachricht für den Benutzer verwendet.

Ich habe nicht einmal gesehen, dass jemand versucht allgemeine Ausnahmebedingung zu parsen, um anders zu reagieren, hängt vom Fehlercode ab, normalerweise wird es durch die Ausnahmehierarchie gemacht.

Andererseits könnte es schwierig sein, für jeden einzelnen Fall eine neue Exception-Unterklasse zu erstellen, und dann werden Exception-Codes verwendet Wenn zum Beispiel für Benutzercode nicht angegeben wird, warum die Transaktion fehlgeschlagen ist, sollte sie auf irgendeine Weise rückgängig gemacht werden, aber für den Endbenutzer ist es wichtig, warum es passiert ist (falsche Parameter, Datenbankverbindung oder anderes).

Um zusammenzufassen: Wenn Sie verschiedene Möglichkeiten erwarten, mit verschiedenen Situationen umzugehen, ist es besser, verschiedene Ausnahmetypen zu verwenden. Wenn Sie jedoch einige Probleme auf die gleiche Weise behandeln sollten, aber nur Benutzer über bestimmte Ursachen benachrichtigen, ist es einfacher, Ausnahmen zu verwenden Codes.

    
Ruslan Dzhabbarov 29.06.2012 16:46
quelle
2

Normalerweise verwende ich eine Kombination aus beiden.

Sie müssen Ihre Ausnahmen kategorisieren und eine Designentscheidung treffen.

Sie können beispielsweise Parameter wie Quelle der Ausnahme, Typ, Auswirkung und Behandlung verwenden, um Ihre Ausnahme zu kategorisieren. Wenn die Ausnahmen in dieselbe Kategorie fallen, verwenden Sie Fehlercodes in. Verwenden Sie die Hierarchie für die Ausnahme in verschiedenen Kategorien.

Wenn Sie die Ausnahmebehandlung als wichtigen Parameter ausgewählt haben, können Sie zwischen den beiden Optionen wählen, je nachdem, wie Sie sie behandeln möchten:

  1. Verwenden Sie Fehlercodes, wenn Sie alle Typen in einem catch-Block abfangen und allgemein behandeln wollen.
  2. Verwenden Sie die Hierarchie, wenn Sie bestimmte Typen gleichzeitig abfangen und entsprechend behandeln möchten.
Husain Basrawala 15.02.2012 10:53
quelle
1

Das Erstellen eines Stacktrace mit komplexer Ausnahmehierarchie ist aus Speicher- und Zeitaspekten sehr kostspielig. Wenn Sie also eine komplexe benutzerdefinierte Ausnahmehierarchie für etwas erstellen, das Sie mit 3-4 statischen Fehlercodes lösen können, würde ich das tun bevorzuge die Fehlercode-Option. Im Allgemeinen bevorzuge ich das Arbeiten mit Runtime-Ausnahmen (nicht in der Methodensignatur markiert). Der deffene Ansatz, abgefangene Ausnahmen abzufangen, ist etwas veraltetes IMO.

    
aviad 15.02.2012 10:52
quelle