Frage

einige Freunde gerade die Implementierung einer App und sie verwenden, um benutzerdefinierte Ausnahmen. etwas, das meine Aufmerksamkeit hat, ist, dass, wenn eine benutzerdefinierte Ausnahme ausgelöst wurde sie die Ausnahme in dem Code der Ausnahme Basisklasse angemeldet sie umgesetzt. so meine Frage wird sein, ist dies ein guter Design-Ansatz ?. mein Denken ist, dass ein Logging-Helfer mehr verwendbar

ist
 public class BaseCustomException: System.Exception
{

   public BaseCustomException()
   {
              TightlyCoupledClass.Log(this);
   }

}
War es hilfreich?

Lösung

Ich verstehe ich Denken dieses an Ort und Stelle bei der Umsetzung, so dass sie, dass die Protokollierung geschieht versichern kann, wann immer eine Ausnahme von CustomException geworfen wird; Dies ist jedoch auf jeden Fall stinkender Code.

Eine Ausnahme verwendet werden sollte nur für Ausnahmen und der Code, der den Code ausführt, der eine CustomException verursachen könnte geworfen werden sollten in der Lage zu entscheiden, was mit dieser Ausnahme zu tun und ob es zur Anmeldung ... weil die Protokollierung sollte, in dem auf das Szenario spezifisch es verursacht wurde.

Eine Randbemerkung, individuelle Ausnahmen von Application als Wurzel erben sollten, so dass man sagen kann, ob die Ausnahme benutzerdefinierte Ihr Unternehmen Bibliotheken oder aus dem .NET-Framework selbst.
--CORRECTION-- Ich habe gerade diesen Beitrag dass ich nicht bewusst, dass im wesentlichen rendert mit Application nutzlos war.

Andere Tipps

Nein, das ist ein schrecklicher Ansatz IMO. Der Grund dafür ist, dass die Annahme ist, dass jede Ausnahme, die erstellt wird, wird geworfen werden, was definitiv nicht der Fall ist.

Da typischerweise Ausnahmen nur gelesen werden, gibt es Implementierungen, bei denen eine Ausnahme für eine bestimmte Situation geschaffen werden und erneut ausgelöst wie nötig (die CLR setzt die Stacktrace, wenn die Ausnahme ausgelöst wird, nicht, wenn gebaut).

Unterm Strich ist es nicht üblich, aber es ist möglich, dass Ausnahmen nicht ausgelöst werden, wenn erstellt, und Sie sollten sich Annahmen, die nicht auf das machen.

Das glaube ich nicht so. Ich würde ein globalen Exception-Handler festgelegt, der die Ausnahme (und andere Daten) in das Protokoll schreiben würde. Auf diese Weise sind Sie nur gefangen Ausnahmen zu schreiben.

Diese Lösung wird zu eng gekoppelt ist, und nicht konfigurierbar. Ich würde empfehlen, eine robustere Ausnahmebehandlung Framework, wie die Enterprise Library Ausnahmebehandlung Application Block .

Protokollierung im Konstruktor ist nur schrecklich. Wie sonst ist der Code, der die Operation versuchte, soll eine sinnvolle Nachricht konstruieren, der die Ausnahme umfassen könnte? Die Rolle der Ausnahme ist das Problem darstellen, eine Nachricht nicht anmelden. Einige andere Code sollte sich darum kümmern, so dass jeder Teil, der diese besondere Ausnahme abfangen kann, kann das tun, was sie wollen, die nicht die Ausnahme beinhalten kann oder Anmeldung.

Im Fall Ihres Protokoll innerhalb des Konstruktors, wenn die Ausnahme gewickelt wurde und erneut ausgelöst wieder gefangen wird, würde die Ausnahme zweimal protokolliert werden, was dumm ist.

catch ( CustomException exception ){
Logger.error( "Really useful message", exception );
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top