मुझे लगता है कि एक महत्वपूर्ण कारक यह है कि आपके सेवा ग्राहक कौन हैं।
यदि आपकी सेवा परत आपके स्वयं के प्रोजेक्ट में परतों के बीच सिर्फ एक वास्तुशिल्प सीमा है, और सेवा क्लाइंट एक ही विश्वास के दायरे में है, तो चीजों को आराम करने के लिए इसका ठीक है, और अनियंत्रित अपवाद को नियंत्रक परत, या सेवा क्लाइंट को बाहर करने दें।
हालांकि, सार्वजनिक सामना करने वाले कोड के लिए; सेवा जो किसी तीसरे पक्ष या ग्राहक द्वारा खपत की जाती है, मुझे लगता है कि सेवा उन्मुख अपवाद के साथ किसी भी अनियंत्रित अपवाद को लपेटना क्लीनर है, मुख्य रूप से सुरक्षा चिंताओं के लिए, दूसरा ढीले युग्मन के लिए, और स्वच्छ अमूर्तता।
एक डेटा लेयर अपवाद कभी नहीं होना चाहिए, सीधे इसे वेब एप्लिकेशन के अंतिम उपयोगकर्ता के लिए सभी तरह से बनाना चाहिए । इसमें संभावित रूप से आपके स्कीमा, आपके प्रश्नों, लाइन नंबर की जानकारी, चर या फ़ंक्शन के नाम आदि के बारे में आंतरिक जानकारी होती है। अंतिम उपयोगकर्ता अपवाद सुरक्षित सेटिंग में सुरक्षित किए जा सकते हैं।
एक बाहरी सेवा क्लाइंट आपके कार्यान्वयन विवरण से चिंतित नहीं है, और वे बग या पर्यावरणीय समस्याओं के कारण अनियंत्रित अपवादों को संभाल नहीं सकते हैं। सुरक्षित अनुप्रयोगों में, डेटाबेस त्रुटियां केवल प्रचार करने के लिए पर्याप्त सुरक्षित नहीं हैं, OracleException - ORA-01234 - ...
जो कि सम्मिलित की गई 3 तालिका हो सकती है। ग्राहक को किसी भी चेक / अपेक्षित अपवादों से निपटने की अनुमति दी जानी चाहिए जो इसे संभाल सकता है, और संभावित बग रिपोर्ट के रूप में बाकी सब का इलाज कर सकता है। आपकी सेवा अनुबंध एक परमाणु, सुसंगत, लेन-देन का अमूर्त होना चाहिए। यदि यह अपवाद के बारे में कुछ नहीं कर सकता है, तो केवल उपयोगी चीज आपको बग रिपोर्ट देना है। आपके पास पहले से ही अपवाद को लॉग इन करने की क्षमता है, इसलिए विवरण के साथ अपने अंतिम उपयोगकर्ता को क्यों बोझ दें? आपके ऐप की निगरानी की जा सकती है ताकि उपयोगकर्ताओं द्वारा रिपोर्ट किए जाने से पहले ही आप अनियंत्रित अपवादों के बारे में जान सकें।
इसके अपवादों को खाने के लिए कभी भी ठीक नहीं है, न ही मैं चेक किए गए अपवादों का प्रशंसक हूं, लेकिन मैं एक ऐसी योजना रखना पसंद करता हूं जो समग्र उत्पाद की प्रकृति के लिए उपयुक्त हो।