मैं इस मुद्दे पर एक अधिक अनुभवी डेवलपर के साथ थोड़ी असहमति में हूं, और सोच रहा हूं कि दूसरे इसके बारे में क्या सोचते हैं; हमारा वातावरण जावा, EJB 3, सेवाओं, आदि है।
मैंने जो कोड लिखा था वह चीजों को प्राप्त करने और चीजों को बनाने के लिए एक सेवा कहता है। मैं जिस समस्या में भाग गया था, वह यह था कि मुझे कोई संकेत नहीं मिला, इसके लिए मुझे शून्य सूचक अपवाद मिला। उदाहरण के लिए, जब मैं सेवा को एक वस्तु बनाने के लिए कहता हूं, तो मैं पीछे हट जाता हूं; जब मैं किसी ज्ञात मान्य आईडी के साथ किसी ऑब्जेक्ट को देखने का प्रयास करता हूं, तो मुझे वापस मिल जाता है। मैंने यह जानने में कुछ समय बिताया कि मेरे कोड में क्या गलत था; चूँकि मैं कम अनुभवी हूँ, मैं आमतौर पर मान लेता हूँ कि मैंने कुछ गलत किया है, लेकिन इससे पता चलता है कि शून्य रिटर्न की वजह सुरक्षा थी। यदि मेरी सेवा का उपयोग करने वाले उपयोगकर्ता प्रिंसिपल के पास लक्ष्य सेवा के लिए सही अनुमति नहीं है, तो यह बस शून्य है। यहां अधिकांश अन्य सेवाओं को बहुत अच्छी तरह से प्रलेखित नहीं किया गया है, इसलिए स्पष्ट रूप से यह सिर्फ कुछ है जिसे आपको जानना है।
यह एक डेवलपर लेखन कोड के रूप में भ्रमित है जो सेवा के साथ सहभागिता करता है। यह मेरे लिए बहुत अधिक समझ में आता है अगर सेवा एक अपवाद है जो मुझे बताएगा कि उपयोगकर्ता के पास इस चीज़ को लोड करने या उस चीज़ को बनाने के लिए उचित अनुमति नहीं है; मुझे तब तुरंत पता चल जाएगा कि मेरी सेवा अपेक्षा के अनुरूप काम क्यों नहीं कर रही थी।
सेवा को लिखने वाले अधिक अनुभवी डेवलपर ने तर्क दिया कि डेटा के लिए पूछना एक त्रुटि स्थिति नहीं है, और यह कि अपवाद केवल एक त्रुटि स्थिति में फेंक दिया जाना चाहिए, न कि जब उपयोगकर्ता के पास डेटा तक पहुंच नहीं है। यह डेटा अक्सर एक जीयूआई में देखा जाता है, और उन उपयोगकर्ताओं के लिए जो सही अनुमतियों के बिना हैं, ये चीजें केवल "मौजूद नहीं हैं"। तो, संक्षेप में: पूछना गलत नहीं है, इसलिए कोई अपवाद नहीं है। उन उपयोगकर्ताओं के कारण विधियाँ वापस आती हैं, क्योंकि वे चीजें "अस्तित्व में नहीं हैं"। जब उपयोगकर्ता उस चीज़ को बनाने की अनुमति नहीं थी, तो विधियाँ वापस लाएँ।
क्या यह सामान्य और / या अच्छा अभ्यास है? मैं अपवादों का उपयोग करना पसंद करता हूं क्योंकि मुझे यह जानना बहुत आसान है कि क्या हो रहा है। इसलिए मैं उदाहरण के लिए, यदि आप एक अवैध आईडी के साथ एक वस्तु के लिए कहा जाता है, तो एक NotFoundException फेंकना पसंद करेंगे, बजाय अशक्त लौटने के।