किसी भी एप्लिकेशन में अपवाद हैंडलिंग मुश्किल है। आपको प्रत्येक अपवाद के बारे में सोचने की ज़रूरत है और जल्दी ही आपके लिए काम करने वाले पैटर्न में आना चाहिए। मैं निम्नलिखित श्रेणियों में कोशिश करते हैं और समूह अपवाद ...
- अपवाद है कि केवल यदि आपका कोड गलत है होना चाहिए (या आप समझ में नहीं आता, या आप उन पर नियंत्रण नहीं है):
उदाहरण: हो सकता है कि अपने हठ ढांचे एसक्यूएल अपवाद विकृत एसक्यूएल से उत्पन्न हो सकते हैं, हालांकि, आप एक हार्ड कोडित क्वेरी को क्रियान्वित कर रहे हैं पकड़ने के लिए की आवश्यकता है।
हैंडलिंग: मेरे अनुभव में इस श्रेणी में सबसे अधिक अपवाद आते हैं। कम से कम, उन्हें लॉग इन करें। इससे भी बेहतर, उन्हें एक अपवाद हैंडलिंग सेवा पर भेजें जो उन्हें लॉग करता है। फिर भविष्य में यदि आप तय करते हैं कि आप उन्हें अलग-अलग लॉग इन करना चाहते हैं या उनके साथ कुछ अलग करना चाहते हैं तो आप इसे एक ही स्थान पर बदल सकते हैं। हो सकता है कि आप यूआई परत पर एक ध्वज भेजना चाहें कि कुछ प्रकार की त्रुटि आई है और उन्हें अपने ऑपरेशन का पुनः प्रयास करना चाहिए। शायद आप एक व्यवस्थापक को मेल करें।
आपको उच्च परतों में कुछ वापस करने की भी आवश्यकता होगी ताकि सर्वर पर जीवन चल रहा हो। शायद यह एक डिफ़ॉल्ट मान है, या शायद यह शून्य है। शायद आपके पास पूरे ऑपरेशन को रद्द करने का कोई तरीका है।
एक और विकल्प अपवाद हैंडलिंग सेवा दो हैंडलिंग विधियों को देना है। handleUnexpectedException()
विधि उपयोगकर्ता को सूचित करेगी लेकिन अपवाद को फिर से नहीं हटाएगी और फिर यदि आप अपने आप को स्टैक खोलने या किसी भी तरह से जारी रखने की क्षमता रखते हैं तो आप एक डिफ़ॉल्ट मान वापस कर सकते हैं। handleFatalException()
विधि उपयोगकर्ता को सूचित करेगी और किसी प्रकार का अपवाद पुनर्स्थापित करेगी ताकि आप अपवाद को फेंकने के लिए अपवाद को फेंक दें।
- अपवाद है कि वास्तव में उपयोगकर्ता के कारण होता है:
उदाहरण: उपयोगकर्ता एक foobar विजेट का अद्यतन करें और यह एक नया नाम देने के लिए कोशिश कर रहा है, लेकिन एक foobar विजेट पहले से ही के साथ मौजूद है वह नाम जो वे चाहते हैं।
हैंडलिंग: इस मामले में आपको उपयोगकर्ता को अपवाद वापस लेने की आवश्यकता है। इस मामले में आप आगे बढ़ सकते हैं और अपवाद फेंकते रहें (या बेहतर, इसे पकड़ भी न दें) जब तक यह यूआई परत तक नहीं पहुंच जाता है और फिर यूआई परत को अपवाद को संभालने के बारे में पता होना चाहिए। इन अपवादों को दस्तावेज करना सुनिश्चित करें ताकि आप (या जो भी आपका यूआई लिख रहे हों) को पता है कि वे मौजूद हैं और उन्हें उम्मीद करने के लिए जानते हैं।
- अपवाद कि आप वास्तव में संभाल कर सकते हैं:
उदाहरण: आप एक दूरस्थ सेवा कॉल और दूरस्थ सेवा का समय समाप्त कर, लेकिन आप जानते हैं कि वे ऐसा करने का इतिहास है और आपको चाहिए बस कॉल फिर से करें।
हैंडलिंग: कभी-कभी ये अपवाद पहली श्रेणी में शुरू होते हैं। थोड़ी देर के लिए आपके आवेदन जंगली में होने के बाद आपको पता चला कि वास्तव में इसे संभालने का एक अच्छा तरीका है।कभी-कभी, आशावादी लॉकिंग या बाधित अपवादों के अपवादों के साथ, अपवाद को पकड़ना और इसके साथ कुछ करना व्यवसाय का एक हिस्सा है। इन मामलों में, अपवाद संभाल लें। यदि आप भाषा हैं (मैं जावा सोच रहा हूं) चेक और अनचेक अपवादों के बीच अंतर करता है तो मैं इन्हें हमेशा अपवादों की जांच करने की अनुशंसा करता हूं।
अपने उपरोक्त प्रश्न को संबोधित करने के लिए मैं उस सेवा के प्रारंभिक अपवाद को प्रतिनिधि दूंगा जो उपयोगकर्ता को सूचित करेगा और किस प्रकार की वस्तु MyObj है (उदाहरण के लिए सेटिंग्स) मैं इसे एक गैर-घातक अपवाद होने और डिफ़ॉल्ट रूप से वापस करने दे सकता हूं मूल्य या यदि मैं ऐसा नहीं कर सकता (जैसे उपयोगकर्ता खाता) तो मैं इसे घातक अपवाद दे सकता हूं इसलिए मुझे इसके बारे में चिंता करने की ज़रूरत नहीं है।
कोई स्वीकार्य उत्तर नहीं है? :/ – Vbp