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.
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.
Fehlercodes sind nützlich, wenn
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% 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.
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:
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.
Tags und Links java exception error-code anti-patterns