
एक सहकर्मी ने कुछ कोड के साथ एक ईमेल भेजा जिससे वह जूझ रहा है। वह बिजनेस लॉजिक चलाने के लिए 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;
}
इस सिस्टम में एक अंतर्निहित दर्शन है कि null खराब हैं। अधिकांश मामलों में जहां null उत्पन्न हो सकता है, एक अपवाद फेंका जाता है। पहले मुझे इसमें कोई समस्या नजर नहीं आई। मैंने इसे एक आर्किटेक्चर निर्णय, एक सौंदर्यशास्त्र के रूप में देखा, लेकिन जैसे-जैसे मैं कोड के साथ इंटरफेस करता हूं, यह मेरे लिए स्पष्ट है कि यह एक आर्किटेक्चरल गलती है।
आप पूछ सकते हैं, null के मामले में अपवाद फेंकना क्यों खराब है?
अपवाد फेंकने पर विचार करते समय नीचे कुछ दिशानिर्देश हैं:
- यह तथ्य कि आपको अपवाद फेंकने के लिए null की जांच करनी पड़ती है, यह एक संकेत होना चाहिए कि इसकी आवश्यकता नहीं है। यह एक अपेक्षित परिणाम है, इसलिए अपवाद नहीं है।
- अपवाद फेंकना एक संसाधन गहन ऑपरेशन है, .Net में किए जा सकने वाले सबसे संसाधन गहन ऑपरेशनों में से एक।
- एक
exception
बस वही है, एक अपवाद। यह कोड में बनाई गई धारणाओं का अपवाद है – जब ये धारणाएं टूट जाती हैं, तो सिस्टम को समाप्त होना चाहिए, यह आगे नहीं बढ़ सकता क्योंकि सिस्टम अज्ञात स्थिति में है (यानी डेटाबेस अब उपलब्ध नहीं है) यह एक हमला वेक्टर भी हो सकता है। - अपवाद फेंकने का मतलब है कि आपको बिजनेस नियमों को लागू करने के लिए अपस्ट्रीम कॉल को
try/catch
ब्लॉक में लपेटना होगा। null मान एप्लिकेशन के प्रवाह को नियंत्रित करने का एक बिजनेस अवसर है। null मान पर कार्रवाई उस बिंदु पर की जानी चाहिए जहां एक बिजनेस निर्णय लेना होगा। उदाहरण के लिए, एक customer वेरिएबल null है, UI लेयर पर उपयोगकर्ता को एक संदेश दिखाया जाता है जिसमें कहा जाता है कि id ‘1234’ वाला customer नहीं मिल सकता।
लेखक: चक कॉनवे सॉफ्टवेयर इंजीनियरिंग और जेनेरेटिव AI में विशेषज्ञता रखते हैं। उनसे सोशल मीडिया पर जुड़ें: X (@chuckconway) या उन्हें YouTube पर देखें।