2012-01-05 9 views
5

शीर्षक बहुत अधिक कहता है लेकिन यहां कुछ पृष्ठभूमि है:क्या ऐसी विधि लिखने का बुरा अभ्यास है जो अपवाद को छोड़कर कुछ भी नहीं करता है?

मेरे पास एक एएसपी.NET एमवीसी एप्लीकेशन है जहां मुझे अस्तित्व के लिए फ़ाइल पथों की एक सूची की जांच करने की आवश्यकता है। यदि कोई भी पथ मौजूद नहीं है तो एक त्रुटि लौटा दी जाती है।

वर्तमान में, मेरे पास बेस नियंत्रक है जहां ऑनएक्सप्शन ईवेंट लागू किया गया है। यहां, किसी भी अनचाहे अपवादों का निपटारा किया जाता है और अपवाद के संदेश के साथ उपयोगकर्ता को एक त्रुटि पृष्ठ वापस कर दिया जाता है।

उपरोक्त जांच करने के लिए मेरे लिए सबसे आसान तरीका एक विधि लिखना है जो अस्तित्व के लिए प्रत्येक पथ की जांच करता है और यदि उनमें से कोई भी विफल रहता है, तो मैं बस अपवाद फेंकता हूं (और लॉग) करता हूं। यह अपवाद तब बेस नियंत्रक द्वारा संभाला जाता है और उपयुक्त संदेश उपयोगकर्ता को वापस कर दिया जाता है।

मेरी समस्या यह है कि ऐसा करने से बुरा अभ्यास लगता है। मैं एक विधि लिख रहा हूं जो शून्य लौटाता है और इसका एकमात्र उद्देश्य दुर्लभ मामले में अपवाद फेंकना है कि पथों में से एक मौजूद नहीं है, ज्यादातर मामलों में यह कुछ भी नहीं करता है। क्या यह एक बुरा विचार है?

+2

आपको क्या लगता है कि यह गलत है? यह एक आम प्रथा है, आप .NET फ्रेमवर्क स्रोत कोड में इसके उदाहरण भी देख सकते हैं। –

+0

मुझे लगता है कि यह सिर्फ गलत महसूस किया। लेकिन कुछ प्रतिक्रिया प्राप्त करना अच्छा है कि यह मामला नहीं है। – zaq

उत्तर

8

इसमें कुछ भी गलत नहीं है।

.NET फ्रेमवर्क यह भी करता है: उदाहरण के लिए, CancellationToken में एक विधि ThrowIfCancellationRequested है जो कुछ शर्त के आधार पर फेंक या फेंक नहीं देती है।

एक और उदाहरण: Dispatcher की VerifyAccess विधि, जो जांचता है कि कॉलर उसी थ्रेड पर है या नहीं, क्योंकि नियंत्रण पर पहुंचा जाना चाहिए, और यदि नहीं तो फेंकता है।

+0

जानना ठीक है। धन्यवाद! – zaq

0

ऑन .net एक नया नया कार्यान्वयन करने का विकल्प मौजूद है, ताकि आप विधियां बना सकें और बाद में उन्हें कार्यान्वित कर सकें। तो यह एक बुरा अभ्यास नहीं है, खराब अभ्यास उन्हें उत्पादन के लिए आवेदन जारी करते समय वहां छोड़ना है। किसी भी कारण से त्रुटियां देना बुरा अभ्यास है।

टीडीडी (परीक्षण संचालित विकास) के लिए भी बहुत उपयोगी हो सकता है, आप विधि बनाते हैं, और फिर इकाई परीक्षण जो अधिसूचित अपवाद के साथ विफल रहता है और अंततः आप परीक्षण पास करने के लिए विधि को लागू करते हैं।

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

+0

मैंने आपको साइट पर रहने के लिए प्रोत्साहित करने के लिए एक +1 दिया है, लेकिन मुझे यह भी लगता है कि यह एक अच्छा जवाब नहीं है: मुझे लगता है कि यह प्रश्न के बिंदु को याद करता है। 'NotImplementedException' के साथ आपका उदाहरण पूरी तरह से अलग है। साथ ही, आपके उत्तर का तीसरा अनुच्छेद फिर से असंबंधित है, और आपको इसे एक टिप्पणी के रूप में पोस्ट करना चाहिए था। –

+0

प्रश्न में विधि हमेशा अपवाद नहीं फेंकती है, वास्तव में कॉल का विशाल बहुमत अपवाद नहीं फेंक देगा।एक अपवाद केवल तभी फेंक दिया जाता है जब पथों में से कोई अस्तित्व में न हो, जो आमतौर पर मामला नहीं होगा। एक बूलियन लौटने का मतलब है कि मैं किस जानकारी के बारे में जानकारी खो देता हूं। बीटीडब्लू, मैंने आपको वोट नहीं दिया, आपकी तर्क अच्छी तरह से समझाई गई है और समझ में आता है लेकिन यह मेरी स्थिति के लिए बिल्कुल उपयुक्त नहीं है। – zaq

+0

फिर, सामान्य व्यवसाय है, अगर यह विफल रहता है तो यह अपवाद फेंकता है, यदि नहीं, तो यह शून्य हो जाता है। तो फिर एक बुरा अभ्यास नहीं है, यह सिर्फ एक शून्य विधि है जो कुछ जांचता है। – H27studio

0

कुछ लोग कह सकते हैं कि यह एक बुरा विचार है, लेकिन कभी-कभी, कोई सौहार्द विकल्प नहीं होता है। यदि आप कुछ कॉलर को किसी त्रुटि को संवाद करने के लिए अपवाद उठाना चाहते हैं, (शायद ओपेक तृतीय-पक्ष कोड द्वारा raiser से अलग), तो इसे करें। अंतिम arbiter - 'यह काम करता है?'

संबंधित मुद्दे

 संबंधित मुद्दे