Ich würde mit Design-Richtlinien für Ausnahmen beginnen, die kurz sind und DO, DO NOT und AVOID enthalten. Es gibt auch die Gründe dafür.
In Ihrem Beispiel wäre der Revelvent-Abschnitt Wrapping Exceptions
Und würde erwarten, dass es so geschrieben wird. Beachten Sie, dass es fängt eine spezifische Ausnahme und versucht, Informationen hinzuzufügen, so dass eine aussagekräftigere Nachricht verbreitet wird. Beachten Sie auch, dass die innere Ausnahme für Protokollierungszwecke weiterhin beibehalten wird
//In DataLayer
try
{
XDocument xd_XmlDocument = XDocument.Load("systems.xml");
}
catch(FileNotFoundException ex)
{
throw new TransactionFileMissingException(
"Cannot Access System Information",ex);
}
UPDATE
Kanini fragt ist es sogar direkt im Data Layer diesen Ausnahmeblock zu haben oder sollte die Überprüfung der Datei auf Business Layer zur Verfügung.
Zunächst möchte ich darauf hinweisen, dass die Begründung für das Umschließen von Ausnahmen die folgende ist
Ziehen Sie in Betracht, bestimmte Ausnahmen, die von einer niedrigeren Ebene ausgelöst wurden, in eine geeignetere Ausnahme einzubeziehen, wenn die Ausnahme für eine niedrigere Ebene im Kontext der Operation für eine höhere Ebene keinen Sinn ergibt.
Also, wenn Sie das Gefühl, die haben eine höhere Schicht über die Datei überhaupt, dann sollten Sie Ihre Datenschicht wie folgt aussehen wissen sollten
//In DataLayer
XDocument xd_XmlDocument = XDocument.Load("systems.xml");
Kein Versuch kein Fang.
Persönlich bin ich der Meinung, dass es eine gute Sache ist, nichts zu tun oder die Ausnahme zu verpacken, wenn Ihre Datenschicht nicht etwas Nützliches wie die Verwendung einer Standarddatei systems.xml, die eine Assembly-Ressource darstellt, kann. ( throw ex
in diesem Fall oder dem bevorzugten throw
auch, fügt aber keinen Wert hinzu). Dies bedeutet, dass Sie das Problem schnell beheben können, sobald Sie es identifiziert haben.
In diesem speziellen Beispiel tritt außerdem das folgende Problem in XDocument.Load auf, das vier Ausnahmen auslösen kann
- ArgumentNullException
- Sicherheitsaußnahme
- FileNotFoundException
- UriFormatException
Wir können nicht sicher garantieren, dass der folgende Code keine FileNotFoundException auslöst, da er möglicherweise vorhanden ist, wenn wir die Existenzprüfung durchführen, und nicht mehr vorhanden ist, wenn wir ihn laden. Dies der Business-Schicht zur Verfügung zu haben, würde nicht helfen.
if (File.Exists("systems.xml"))
XDocument.Load("systems.xml");
SecurityException ist noch schlimmer, da unter anderem, wenn ein anderer Prozess eine exklusive Dateisperre hat, die Fehlermeldung erst angezeigt wird, wenn Sie ihn zum Lesen öffnen, da es keine File.CanIOpenThis () - Methode gibt. Und wenn eine solche Methode existiert, haben Sie immer noch das gleiche Problem wie bei File.Exists