मैं अपने आवेदन में अपवादों को कैसे संभालना है, यह तय कर रहा हूं।
यदि अपवाद के साथ मेरे मुद्दे 1 से आते हैं) एक दूरस्थ सेवा या 2 के माध्यम से डेटा तक पहुँचने के लिए) JSON ऑब्जेक्ट को डिस्क्राइबलाइज़ करना। दुर्भाग्य से मैं इनमें से किसी भी कार्य के लिए सफलता की गारंटी नहीं दे सकता (कट नेटवर्क कनेक्शन, विकृत JSON ऑब्जेक्ट जो मेरे नियंत्रण से बाहर है)।
नतीजतन, अगर मैं एक अपवाद का सामना करता हूं तो मैं इसे केवल फ़ंक्शन के भीतर पकड़ता हूं और कॉल करने वाले को FALSE लौटाता हूं। मेरा तर्क यह है कि सभी कॉलर वास्तव में परवाह करते हैं कि क्या कार्य सफल था, इसलिए नहीं कि यह सफल नहीं था।
यहाँ एक विशिष्ट विधि का कुछ नमूना कोड (जावा में) है
public boolean doSomething(Object p_somthingToDoOn)
{
boolean result = false;
try{
// if dirty object then clean
doactualStuffOnObject(p_jsonObject);
//assume success (no exception thrown)
result = true;
}
catch(Exception Ex)
{
//don't care about exceptions
Ex.printStackTrace();
}
return result;
}
मुझे लगता है कि यह दृष्टिकोण ठीक है, लेकिन मैं वास्तव में यह जानने के लिए उत्सुक हूं कि अपवादों को प्रबंधित करने के लिए सबसे अच्छी प्रथाएं क्या हैं (क्या मुझे वास्तव में एक कॉल स्टैक अप को छोड़कर सभी तरह से अपवाद करना चाहिए?)।
प्रमुख सवालों के सारांश में:
- क्या केवल अपवादों को पकड़ना ठीक है, लेकिन उन्हें बुलबुला बनाना या औपचारिक रूप से सिस्टम को सूचित नहीं करना (या तो लॉग या उपयोगकर्ता की सूचना के माध्यम से)?
- अपवादों के लिए कौन सी सर्वोत्तम प्रथाएं हैं जो एक कोशिश / कैच ब्लॉक की आवश्यकता के परिणामस्वरूप नहीं होती हैं?
ऊपर / संपादित करें
सभी प्रतिक्रिया के लिए धन्यवाद, अपवाद प्रबंधन पर कुछ उत्कृष्ट स्रोत ऑनलाइन मिले:
- अपवाद संचालन के लिए सर्वोत्तम अभ्यास | ओ'रेली मीडिया
- .NET में बेस्ट प्रैक्टिस को एक्सेप्शन हैंडलिंग
- सर्वोत्तम प्रथाएँ: अपवाद प्रबंधन (लेख अब आर्काइव.ऑर्ग कॉपी की ओर इंगित करता है)
- अपवाद-हैंडलिंग एंटीपैटर्न
ऐसा लगता है कि अपवाद प्रबंधन उन चीजों में से एक है जो संदर्भ के आधार पर बदलती हैं। लेकिन सबसे महत्वपूर्ण बात यह है कि किसी व्यक्ति को सिस्टम के भीतर अपवाद का प्रबंधन करने के तरीके में सुसंगत होना चाहिए।
इसके अतिरिक्त अत्यधिक कोशिश / कैच के माध्यम से कोड-रोट देखने के लिए या एक अपवाद नहीं देने पर इसका सम्मान (एक अपवाद सिस्टम को चेतावनी दे रहा है, और क्या चेतावनी दी जानी चाहिए?)।
इसके अलावा, यह m3rLinEz की एक सुंदर पसंद है ।
मैं एंडर्स हेजेल्सबर्ग और आप से सहमत हूं कि सबसे ज्यादा कॉल करने वाले केवल इस बात की परवाह करते हैं कि ऑपरेशन सफल है या नहीं।
इस टिप्पणी से अपवादों से निपटने के बारे में सोचने के लिए कुछ प्रश्न सामने आते हैं:
- यह अपवाद किस बिंदु पर फेंका जा रहा है?
- इसे संभालने के लिए कैसे समझ में आता है?
- क्या कॉलर वास्तव में अपवाद के बारे में परवाह करता है या क्या वे केवल परवाह करते हैं कि क्या कॉल सफल हुआ था?
- एक संभावित अपवाद का प्रबंधन करने के लिए एक फोन करने वाले को मजबूर करने के लिए मजबूर किया जाता है?
- क्या आप भाषा के मुहावरों के प्रति सम्मानजनक हैं?
- क्या आपको वास्तव में बूलियन की तरह एक सफलता झंडा वापस करने की आवश्यकता है? रिटर्निंग बूलियन (या इंट) एक जावा की तुलना में सी मानसिकता से अधिक है (जावा में आप सिर्फ अपवाद को संभालेंगे) एक।
- भाषा से जुड़े त्रुटि प्रबंधन निर्माणों का अनुसरण करें :)!