Wenn eine benutzerdefinierte Ausnahme und einige gute Beispiele / best Practices zu bedienen?

StackOverflow https://stackoverflow.com/questions/2600607

Frage

Ich würde davon ausgehen, dass die meisten Benutzerdefinierte Ausnahmen sind für Business-Logik-Ebene Ausnahmen, aber was sind einige gute Gründe, eine benutzerdefinierte Exception zu verwenden, und was sind einige gute Beispiele?

Ist eine benutzerdefinierte Ausnahme der einzige Vorteil, dass Sie eine konsistente Fehlermeldung definieren können?

Was Logik kann innerhalb Ausnahmen geschrieben werden, um sie nützlicher wirklich zu machen?

Schließlich können Sie nicht nur dies tun: throw new Exception("Some Error Message");

War es hilfreich?

Lösung

Mit Ausnahmen benutzerdefinierte ist nützlich, weil es Ihnen verschiedene Arten von Fehlern in spezifischer Weise zu handhaben kann. Warum .NET definieren so viele verschiedene Arten von Ausnahmen, wenn sie nur alle Ausnahmen wie System.Exception mit einer anderen Textnachricht werfen könnte? Der Grund, dass es verschiedene Arten von Ausnahmen in .NET sind, ist, dass Sie einzelne Arten von Fehlern zu fangen und sie anders zu behandeln. Das ist der gleiche Grund, warum Sie Ihre eigenen Benutzer Ausnahmen definieren würde - so dass Sie eine andere Antwort auf die Art der Ausnahme Basis zur Verfügung stellen kann, die aufgetreten sind.

Sie können auch benutzerdefinierte Ausnahmen, die zusätzlichen Daten erstellen. Zum Beispiel könnten Sie einen Schweregrad basierend auf einem Enum, einen ganze Zahl Fehlercode oder irgendetwas anderes definieren, die den Aufruf Programm nützlich sein könnte, zu identifizieren, was schief gelaufen ist. Wie für die Logik in Ausnahmen gehören, in der Regel versuche ich nur zu berichten, was schief gelaufen ist und lassen Sie die Logik zu dem rufenden Programm (was ist mit dem Fehler zu tun). In einigen Fällen habe ich den Ausnahmecode automatisch den Fehler in eine Protokolldatei schreiben, wenn er einen bestimmten Schweregrad überschritten hat (zum Beispiel Warnungen ausgelöst werden, sondern nur noch kritische Fehler werden in die Protokolldatei geschrieben).

Andere Tipps

Sie sollten erstellen sehr wenige benutzerdefinierten Ausnahmen. Sie sollten nur verwendet werden, wenn jemand geht, die Ausnahme zu fangen und damit etwas Bestimmtes zu tun. Wenn Ihre Ausnahme statt InvalidOperationException werfen wird nicht anders gehen, um den Code zu verhalten, dann InvalidOperationException werfen.

Es gibt eine ganze Reihe von Ausnahmen bereits im .NET Framework, die Sie verwenden sollen, wenn Sie einen finden können, die für Ihren außergewöhnlichen Umstand genutzt werden könnten.

Zum Beispiel in meiner Konfiguration Klassen (die in der Regel sind Wrapper um die ConfigurationManager) Ich ConfigurationErrorsException werfen, wenn überhaupt ein Wert nicht korrekt analysiert werden kann.

Wenn Sie benutzerdefinierte Werte von Text Parsen oder etwas anderes, das ein specfic Format erfordert und die Analyse fehlschlägt, werfe ich ein FormatException

Allerdings, wenn mein BankAccount Objekt hat nicht genug Geld drin für mich £ zurückzuziehen 10 dann werde ich schreiben und InsufficentFundsException werfen, weil dann die Art, wie ich, dass bestimmte Fehlerfall umgehen kann, wenn sie auftritt je.

Hope this (etwas) hilft.

Nein, sie sind nicht nur für die Nachrichten. Sie können Benutzer definiert diejenigen in der Ausnahmeliste eines catch-Block suchen.

catch(UserDefinedException){}
catch(Exception){}

Sie können die User Defined Ausnahmen verwenden, wenn Sie wollen etwas Bestimmtes suchen, die auftritt. Vielleicht ist eine Client-ID eines bestimmten Bereichs und Sie, dass speziell zu suchen. Statt die Fehlermeldung zu analysieren, die (das ist ein Schmerz sein kann, und ist anfällig für Fehler, wie wenn die Nachricht ändert sich später auf der Straße), haben Sie eine Ausnahme, die Sie verwenden, und Sie wissen, dass irgendwo im Code ausdrücklich sagt Sie „Hey das passiert ist. Sie müssen sich dessen bewusst sein.“

Benutzerdefinierte Ausnahmen können innerhalb einer Komponente verwendet werden, die Verbraucher von der Komponente zu erlauben, die Fähigkeit, sie mit einem höheren Grad an Granularität zu fangen dann der catch (Exception) Block. Dadurch wird die Komponente der Verbraucher die Möglichkeit bietet, verschiedene Aufgaben zu erfüllen, basierend auf welcher Ausnahme ausgelöst wurde. Benutzer definierten Ausnahmen sollten wirklich nur dann erstellt werden, wenn es eine wirkliche Erwartung ist, dass die Verbraucher sie benutzen werden auf diese Weise zu unterscheiden.

Sie können auch Eigenschaften hinzufügen zusätzlich zu speichern Meta-Daten mit einer benutzerdefinierten Ausnahme, wie ein Fehlercode (zum Beispiel, wenn eine nicht verwaltete API aufrufen). Dies ist benutzerfreundlicher als einfach Sachen in die Data-Eigenschaft des Exception-Objekts setzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top