Saya akan mulai dengan Pedoman Desain untuk Pengecualian yang singkat dan termasuk JANGAN, JANGAN, dan HINDARI. Itu juga memberi alasan mengapa.
Dalam contoh Anda, bagian revelvent akan menjadi Pengecualian Pembungkus
Dan akan berharap itu ditulis dengan cara ini. Perhatikan bahwa ia menangkap pengecualian khusus dan mencoba menambahkan informasi sehingga pesan yang lebih bermakna disebarkan. Perhatikan juga bahwa pengecualian dalam masih dipertahankan untuk tujuan logging
//In DataLayer
try
{
XDocument xd_XmlDocument = XDocument.Load("systems.xml");
}
catch(FileNotFoundException ex)
{
throw new TransactionFileMissingException(
"Cannot Access System Information",ex);
}
UPDATE
Kanini bertanya apakah tepat untuk memiliki blok pengecualian ini di Layer Data atau harus memeriksa file yang tersedia untuk Business Layer.
Yah pertama-tama saya ingin menunjukkan bahwa alasan untuk Membungkus Pengecualian adalah ini
Pertimbangkan untuk membungkus pengecualian khusus yang dilemparkan dari lapisan bawah dalam pengecualian yang lebih tepat, jika pengecualian lapisan bawah tidak masuk akal dalam konteks operasi lapisan yang lebih tinggi.
Jadi jika Anda merasa yang memiliki layer lebih tinggi harus tahu tentang file sama sekali maka layer data Anda akan terlihat seperti ini
//In DataLayer
XDocument xd_XmlDocument = XDocument.Load("systems.xml");
Tidak Coba Tidak Menangkap.
Secara pribadi saya merasa bahwa kecuali lapisan data Anda dapat melakukan sesuatu yang berguna seperti menggunakan sistem default.xml yang merupakan sumber daya perakitan, tidak melakukan apa pun atau membungkus pengecualian adalah taruhan yang baik karena pencatatan Anda akan memberi tahu Anda metode apa dan file apa masalahnya. ( throw ex
dalam hal ini atau yang disukai throw
tidak juga tetapi tidak menambah nilai). Ini berarti bahwa sekali teridentifikasi Anda akan dapat memperbaiki masalah dengan cepat.
Sebagai contoh tambahan ini juga memiliki masalah berikut dalam XDocument.Load dapat membuang empat eksekusi
- ArgumentNullException
- KeamananException
- FileNotFoundException
- UriFormatException
Kami tidak dapat dengan aman menjamin bahwa kode berikut tidak akan membuang dan FileNotFoundException, hanya karena bisa ada di sana ketika kami memeriksa keberadaan dan pergi ketika kami memuat. Memiliki yang tersedia untuk lapisan bisnis tidak akan membantu.
if (File.Exists("systems.xml"))
XDocument.Load("systems.xml");
SecurityException bahkan lebih buruk karena di antara alasan lain untuk ini dilemparkan jika proses pengambilan lain memiliki kunci file eksklusif Anda tidak akan mendapatkan kesalahan sampai Anda mencoba membukanya untuk dibaca karena tidak ada metode File.CanIOpenThis (). Dan jika ada metode seperti itu, Anda masih memiliki masalah yang sama dengan File.Exists