अपवादों पर एरिक लिपर्ट के लेख को पढ़ना निश्चित रूप से एक आंख खोलने वाला था कि मुझे निर्माता और उपभोक्ता के रूप में अपवादों को कैसे अपनाना चाहिए। हालांकि, मैं अभी भी एक दिशानिर्देश को परिभाषित करने के लिए संघर्ष कर रहा हूं कि कैसे वेक्सिंग अपवादों को फेंकने से बचें।
विशेष रूप से:
- मान लीजिए कि आपके पास एक बचत विधि है जो विफल हो सकती है क्योंकि a) किसी और ने आपके सामने रिकॉर्ड को संशोधित किया है , या b) वह मान जिसे आप पहले से मौजूद बनाने का प्रयास कर रहे हैं । इन स्थितियों की उम्मीद की जानी चाहिए और असाधारण नहीं है, इसलिए एक अपवाद को फेंकने के बजाय, आप अपनी पद्धति का एक कोशिश संस्करण बनाने का निर्णय लेते हैं, ट्राइसेव, जो एक बूलियन को संकेत देता है कि क्या बचत सफल हुई। लेकिन अगर यह विफल हो जाता है, तो उपभोक्ता कैसे जानेंगे कि समस्या क्या थी? या परिणाम का संकेत करने वाले एक एनुम को वापस करना सबसे अच्छा होगा, ओके / रिकॉर्डअलरेडीमोडिफाइड / वैल्यूएलाइजिस्ट्स की तरह? Integer.TryParse के साथ यह समस्या मौजूद नहीं है, क्योंकि केवल एक ही कारण विधि विफल हो सकती है।
- क्या पिछला उदाहरण वास्तव में एक विकट स्थिति है? या इस मामले में एक अपवाद को फेंकना पसंदीदा तरीका होगा? मुझे पता है कि एंटिटी ढांचे सहित अधिकांश पुस्तकालयों और रूपरेखाओं में यह कैसे किया जाता है।
- आप यह कैसे तय करते हैं कि अपनी विधि का एक आज़माया हुआ संस्करण कैसे बनाया जाए? मैं वर्तमान में इन दिशानिर्देशों का पालन कर रहा हूं:
- यदि दौड़ की स्थिति का मौका है, तो एक कोशिश संस्करण बनाएं। यह उपभोक्ता के लिए एक बाहरी अपवाद को पकड़ने की आवश्यकता को रोकता है। उदाहरण के लिए, पहले बताई गई सेव विधि में।
- यदि विधि को बहुत अधिक परीक्षण करने की विधि मूल विधि से सभी करती है, तो एक कोशिश संस्करण बनाएं। उदाहरण के लिए, integer.TryParse ()।
- किसी अन्य मामले में, स्थिति का परीक्षण करने के लिए एक विधि बनाएं।