Skip to content

पोस्ट

अपवाद फेंकते समय विचार

21 मार्च 2013 • 3 मिनट पढ़ना

अपवाद फेंकते समय विचार

एक सहकर्मी ने कुछ कोड के साथ एक ईमेल भेजा जिसमें वह संघर्ष कर रहे हैं। वह try/catches का उपयोग करके व्यावसायिक तर्क चलाने से बचने की कोशिश कर रहे हैं।

समस्या try/catches नहीं है, यह केवल समस्या का एक लक्षण है। क्या आप समस्या को देख सकते हैं? आपको कुछ धारणाएं बनानी होंगी, लेकिन मुझे विश्वास है कि आप उसी निष्कर्ष पर पहुंचेंगे जिस पर मैं पहुंचा हूं।

कोड नीचे है; मैंने इसे निर्दोष लोगों की रक्षा के लिए बदल दिया है:

private Customer GetOrCreateCustomer(long customerTelephoneNumberOrCustomerId)
        {
           Customer customer;
            try
            {
                customer = this.DoMagic(customerMasterTelephoneNumberOrCustomerId);
            }
            catch (DataException)
            {
                try
                {
                    //TODO: I know this isn't ideal. Still thinking of a better way to do this. 
                    customer = this. GetCustomer(customerMasterTelephoneNumberOrCustomerId);
                }
                catch (DataException)
                {
                    customer = this.GetCustomerFromExternal(customerMasterTelephoneNumberOrCustomerId);
                    customer.CustomerId = this.CreateCustomer(customer);
                }
            }

            return customer;
        }

इस सिस्टम में एक अंतर्निहित दर्शन है कि nulls खराब हैं। अधिकांश मामलों में जहां एक null उत्पन्न हो सकता है, एक अपवाद फेंका जाता है। शुरुआत में मुझे इसमें कोई समस्या नहीं दिख रही थी। मैंने इसे एक आर्किटेक्चर निर्णय, एक सौंदर्य के रूप में देखा, लेकिन जैसे-जैसे मैं कोड के साथ इंटरफेस करता हूं, मुझे यह स्पष्ट हो गया है कि यह एक आर्किटेक्चरल गलती है।

आप पूछ सकते हैं, nulls के मामले में अपवाद फेंकना क्यों खराब है?

नीचे अपवाद फेंकने पर विचार करते समय कुछ दिशानिर्देश दिए गए हैं:

  1. यह तथ्य कि आपको अपवाद फेंकने के लिए null की जांच करनी पड़ी, यह एक संकेत है कि इसकी आवश्यकता नहीं है। यह एक अपेक्षित परिणाम है, इसलिए अपवाद नहीं है।
  2. अपवाद फेंकना एक संसाधन-गहन ऑपरेशन है, .Net में किए जा सकने वाले सबसे संसाधन-गहन ऑपरेशनों में से एक है।
  3. एक exception बस वही है, एक अपवाद। यह कोड में की गई धारणाओं का अपवाद है - जब ये धारणाएं टूट जाती हैं, तो सिस्टम को समाप्त होना चाहिए, यह आगे नहीं बढ़ सकता क्योंकि सिस्टम एक अज्ञात स्थिति में है (अर्थात डेटाबेस अब उपलब्ध नहीं है) यह एक हमले का वेक्टर भी हो सकता है।
  4. अपवाद फेंकने का मतलब है कि आपको व्यावसायिक नियमों को लागू करने के लिए अपस्ट्रीम कॉल को try/catch ब्लॉक में लपेटना होगा। एक null मान एक व्यावसायिक अवसर है जो एप्लिकेशन के प्रवाह को नियंत्रित करता है। null मान पर की जाने वाली कार्रवाई उस बिंदु पर की जानी चाहिए जहां एक व्यावसायिक निर्णय लिया जाना चाहिए। उदाहरण के लिए, एक ग्राहक चर null है, UI परत पर उपयोगकर्ता को एक संदेश दिखाया जाता है जो बताता है कि id ‘1234’ वाला ग्राहक नहीं मिल सकता है।

लेखक: Chuck Conway एक AI इंजीनियर हैं जिनके पास सॉफ्टवेयर इंजीनियरिंग का लगभग 30 साल का अनुभव है। वह व्यावहारिक AI सिस्टम बनाते हैं—कंटेंट पाइपलाइन, इंफ्रास्ट्रक्चर एजेंट, और ऐसे टूल जो वास्तविक समस्याओं को हल करते हैं—और अपनी सीख को साझा करते हैं। सोशल मीडिया पर उनसे जुड़ें: X (@chuckconway) या YouTube और SubStack पर उनसे मिलें।

↑ शीर्ष पर वापस जाएं

आपको यह भी पसंद आ सकता है