मैं इसकी संक्षिप्तताओं के लिए डिजाइन दिशानिर्देशों के साथ शुरू करूँगा और इसमें DO, DO NOT और AVOID शामिल हैं। यह कारण भी बताता है।
आपके उदाहरण के मामले में रहस्योद्घाटन अनुभाग रैपिंग अपवाद होगा
और उम्मीद करेगा कि इसे इस तरह से लिखा जाएगा। ध्यान दें कि यह एक विशिष्ट अपवाद को पकड़ता है और जानकारी जोड़ने का प्रयास करता है ताकि एक अधिक सार्थक संदेश प्रसारित हो। यह भी ध्यान दें कि लॉगिंग उद्देश्यों के लिए आंतरिक अपवाद अभी भी बनाए रखा गया है
//In DataLayer
try
{
XDocument xd_XmlDocument = XDocument.Load("systems.xml");
}
catch(FileNotFoundException ex)
{
throw new TransactionFileMissingException(
"Cannot Access System Information",ex);
}
UPDATE
कानिनी पूछती है कि डेटा लेयर में यह अपवाद ब्लॉक होना भी सही है या फ़ाइल को बिजनेस लेयर के लिए उपलब्ध होना चाहिए।
पहले मैं यह बताना चाहूंगा कि रैपिंग अपवाद के लिए तर्क यह है
अधिक उपयुक्त अपवाद में निचली परत से फेंके गए विशिष्ट अपवादों पर विचार करें, यदि निचली परत का अपवाद उच्चतर परत के संचालन के संदर्भ में कोई मतलब नहीं रखता है।
इसलिए यदि आपको लगता है कि उच्च परत में फ़ाइल के बारे में जानकारी होनी चाहिए तो आपकी डेटा परत इस तरह दिखनी चाहिए
//In DataLayer
XDocument xd_XmlDocument = XDocument.Load("systems.xml");
नो ट्राई नो कैच।
व्यक्तिगत रूप से मुझे लगता है कि जब तक आपकी डेटा परत कुछ उपयोगी नहीं कर सकती है जैसे कि एक डिफ़ॉल्ट सिस्टम का उपयोग करें। xml जो कि एक असेंबली संसाधन है, कुछ भी नहीं करना या अपवाद को लपेटना एक अच्छा शर्त है क्योंकि आपका लॉगिंग आपको बताएगा कि क्या विधि और क्या फ़ाइल समस्या थी। ( throw ex
इस मामले में या पसंदीदा throw
भी करता है, लेकिन कोई मूल्य नहीं जोड़ता है)। इसका मतलब है कि एक बार पहचानने के बाद आप समस्या को जल्दी ठीक कर पाएंगे।
एक उदाहरण के रूप में इस विशेष उदाहरण में XDocument.lad में निम्नलिखित समस्या है जो चार अपवादों को फेंक सकती है
- ArgumentNullException
- सुरक्षा अपवाद
- FileNotFoundException
- UriFormatException
हम सुरक्षित रूप से गारंटी नहीं दे सकते हैं कि निम्न कोड नहीं फेंकेंगे और FileNotFoundException, सिर्फ इसलिए कि जब हम अस्तित्व की जांच करते हैं और लोड होने पर चले जाते हैं तो यह वहां हो सकता है। व्यापार परत के लिए उपलब्ध होने से मदद नहीं मिलेगी।
if (File.Exists("systems.xml"))
XDocument.Load("systems.xml");
SecurityException और भी ख़राब है क्योंकि इसके फेंके जाने के अन्य कारणों के बीच अगर किसी अन्य प्रक्रिया में एक विशेष फ़ाइल लॉक है तो आपको त्रुटि नहीं मिलेगी जब तक कि आप इसे पढ़ने के लिए खोलने का प्रयास नहीं करते क्योंकि कोई File.CanIOpenThis () विधि नहीं है। और अगर इस तरह की कोई विधि मौजूद है तो भी आपको File.Exists जैसी ही समस्या है