Was ist die beste Vorgehensweise beim Erstellen Ihrer Ausnahmeklassen in einer .NET-Lösung: Ableiten von System.Exception
oder von System.ApplicationException
?
Antworten:
Laut Jeffery Richter im Buch Framework Design Guidelines:
System.ApplicationException
ist eine Klasse, die nicht Teil des .NET Frameworks sein sollte.
Es sollte eine Bedeutung haben, da Sie möglicherweise "alle" Anwendungsausnahmen abfangen können, aber das Muster wurde nicht befolgt und hat daher keinen Wert.
Exception
? Wenn ja, könnten Sie das sagen?
Sie sollten benutzerdefinierte Ausnahmen von ableiten System.Exception
.
Sogar MSDN sagt jetzt zu ignorieren ApplicationException
:
Wenn Sie eine Anwendung entwerfen, die eigene Ausnahmen erstellen muss, wird empfohlen, benutzerdefinierte Ausnahmen von der Exception-Klasse abzuleiten. Es wurde ursprünglich angenommen, dass benutzerdefinierte Ausnahmen von der ApplicationException-Klasse abgeleitet werden sollten. In der Praxis wurde jedoch kein signifikanter Mehrwert festgestellt. Weitere Informationen finden Sie unter Best Practices für den Umgang mit Ausnahmen .
http://msdn.microsoft.com/en-us/library/system.applicationexception.aspx
ApplicationException
als nutzlos angesehen wird ein starkes und kritisches Argument dagegen ApplicationException
.
Fazit: Benutze es nicht. Ableiten von Exception
.
Die Autoren des Frameworks selbst halten ApplicationException für wertlos:
mit einem netten Follow-up hier:
Im Zweifelsfall folge ich ihrem Buch Framework Design Guidelines.
http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756
Das Thema des Blogposts wird dort weiter diskutiert.
rp
Ich bin es gewohnt:
private void buttonFoo_Click()
{
try
{
foo();
}
catch(ApplicationException ex)
{
Log.UserWarning(ex);
MessageVox.Show(ex.Message);
}
catch(Exception ex)
{
Log.CodeError(ex);
MessageBox.Show("Internal error.");
}
}
Es erlaubt den Unterschied zu machen zwischen:
Ich weiß, dass die Verwendung von ApplicationException nicht empfohlen wird, aber es funktioniert hervorragend, da es nur sehr wenige Klassen gibt , die das ApplicationException-Muster nicht berücksichtigen.