İstisnalar için Tasarım Kuralları ile başlayıp kısa ve DO, DO NOT ve AVOID'i içerirdim. Aynı zamanda nedenlerini de verir.
Örneğinizde, yeniden düzenleme bölümü Sarma İstisnaları olacaktır.
Ve bu şekilde yazılmasını beklerdim. Özel bir istisna yakaladığını ve daha anlamlı bir mesajın yayılması için bilgi eklemeye çalıştığını unutmayın. Ayrıca, iç istisnanın hala kayıt amacıyla tutulduğunu unutmayın.
//In DataLayer
try
{
XDocument xd_XmlDocument = XDocument.Load("systems.xml");
}
catch(FileNotFoundException ex)
{
throw new TransactionFileMissingException(
"Cannot Access System Information",ex);
}
GÜNCELLEME
Kanini, bu istisna bloğunun Veri Katmanında bulunmasının doğru olup olmadığını veya dosyanın kontrolünün İş Katmanı'na uygun olup olmadığını soruyor.
Öncelikle, Sarma İstisnaları gerekçesinin bu olduğunu belirtmek isterim.
Alt katman istisnası, yüksek katman operasyonu bağlamında bir anlam ifade etmiyorsa, alt katmandan atılan özel istisnaları daha uygun bir istisnada sarmayı düşünün.
Eğer daha yüksek bir katmana sahip olduğunu düşünüyorsanız, dosya hakkında bir şey bilmeli, o zaman veri katmanınız şöyle görünmelidir.
//In DataLayer
XDocument xd_XmlDocument = XDocument.Load("systems.xml");
Hayır, yakala.
Şahsen, veri katmanınız bir montaj kaynağı olan default systems.xml kullanmak gibi yararlı bir şey yapamadığı sürece hiçbir şey yapmadan veya istisnayı sarmamanın, günlüğe kaydetmenizin size hangi yöntemi ve sorunun ne olduğunu söyleyeceği için iyi bir bahis olduğunu düşünüyorum. ( throw ex
Bu durumda veya tercih edilen throw
de öyle ama değer katmıyor). Bu, bir kez tanımlandıktan sonra sorunu hızla çözebileceğiniz anlamına gelir.
Aslına bakılırsa, bu özel örnek ayrıca, XDocument.Load'un dört yürütme işlemi yapabilmesi için aşağıdaki sorunlara da sahiptir:
- ArgumentNullException
- SecurityException
- FileNotFoundException
- UriFormatException
Aşağıdaki kodun ve FileNotFoundException dosyalarının atılmayacağını garanti edemeyiz, çünkü sadece varoluş kontrolü yaptığımızda ve yükleme yaparken gittiğimizde de olabilir. Bunun iş katmanına uygun olması yardımcı olmaz.
if (File.Exists("systems.xml"))
XDocument.Load("systems.xml");
SecurityException daha da kötü, çünkü bunun için atılan diğer nedenlerin yanı sıra, başka bir işlem tutucusu özel bir dosya kilidine sahipse, File.CanIOpenThis () yöntemi olmadığı için okumak için açmayı deneyene kadar hatayı almayacaksınız. Eğer böyle bir yöntem mevcutsa, hala File.Exists ile aynı problemi yaşarsınız.