मेरे कार्यक्रम का एक हिस्सा प्रसंस्करण के लिए मेरे डेटाबेस में कई तालिकाओं और स्तंभों से डेटा प्राप्त करता है। कुछ कॉलम हो सकते हैं null
, लेकिन वर्तमान प्रसंस्करण संदर्भ में जो एक त्रुटि है।
यह "सैद्धांतिक रूप से" नहीं होना चाहिए, इसलिए यदि यह खराब डेटा या कोड में एक बग को इंगित करता है। त्रुटियों की अलग-अलग गंभीरता होती है, यह निर्भर करता है कि कौन सा क्षेत्र है null
; अर्थात कुछ क्षेत्रों के लिए प्रसंस्करण बंद कर दिया जाना चाहिए और किसी को अधिसूचित किया जाना चाहिए, दूसरों के लिए प्रसंस्करण जारी रखने की अनुमति दी जानी चाहिए और बस किसी को सूचित करना चाहिए।
क्या दुर्लभ लेकिन संभव null
प्रविष्टियों को संभालने के लिए कोई अच्छा आर्किटेक्चर या डिज़ाइन सिद्धांत हैं?
समाधान जावा के साथ लागू करना संभव होना चाहिए लेकिन मैंने टैग का उपयोग नहीं किया क्योंकि मुझे लगता है कि समस्या कुछ हद तक भाषा-अज्ञेयवादी है।
कुछ विचार जो मैंने स्वयं लिए थे:
नल का उपयोग नहीं
सबसे आसान डेटाबेस में एक पूर्ण नाल बाधा का उपयोग करना होगा।
लेकिन क्या होगा अगर डेटा की मूल प्रविष्टि अधिक महत्वपूर्ण है कि यह बाद में प्रसंस्करण कदम है? इसलिए यदि इंसर्ट null
टेबल में रखा जाता है (या तो बग्स के कारण या शायद कुछ वैध कारण भी), तो मैं नहीं चाहूंगा कि इन्सर्ट फेल हो जाए। मान लें कि प्रोग्राम के कई और हिस्से सम्मिलित डेटा पर निर्भर करते हैं, लेकिन इस विशेष कॉलम पर नहीं। इसलिए मैं डालने के चरण के बजाय वर्तमान प्रसंस्करण चरण में त्रुटि का जोखिम उठाऊंगा। यही कारण है कि मैं एक नहीं पूर्ण बाधा का उपयोग नहीं करना चाहता।
मूल रूप से NullPointerException पर निर्भर करता है
मैं सिर्फ डेटा का उपयोग कर सकता हूं जैसे कि मैं उम्मीद करता हूं कि यह हमेशा (और वास्तव में ऐसा होना चाहिए), और परिणामस्वरूप एनपीई को एक उचित स्तर पर पकड़ें (जैसे कि ताकि वर्तमान प्रविष्टि का प्रसंस्करण बंद हो जाए लेकिन पूरी प्रसंस्करण प्रगति न हो )। यह "विफल तेज़" सिद्धांत है और मैं अक्सर इसे पसंद करता हूं। अगर यह बग है तो कम से कम मुझे एक लॉग एनपीई मिलेगा।
लेकिन फिर मैं विभिन्न प्रकार के लापता डेटा के बीच अंतर करने की क्षमता खो देता हूं। उदाहरण के लिए कुछ लापता डेटा को मैं इसे छोड़ सकता हूं, लेकिन दूसरों के लिए प्रसंस्करण बंद कर दिया जाना चाहिए और एक व्यवस्थापक को सूचित किया जाना चाहिए।
null
प्रत्येक पहुंच से पहले की जाँच करना और कस्टम अपवादों को फेंकना
कस्टम अपवाद मुझे अपवाद के आधार पर सही कार्रवाई का निर्णय लेने देंगे, इसलिए यह जाने का तरीका लगता है।
लेकिन क्या होगा अगर मैं इसे कहीं जांचना भूल जाऊं? इसके अलावा, मैं अपने कोड को अशक्त चेक के साथ बंद कर देता हूं जो कभी भी या शायद ही कभी अपेक्षित नहीं होते हैं (और इसलिए निश्चित रूप से व्यापार तर्क प्रवाह का हिस्सा नहीं है)।
यदि मैं इस तरह जाना चाहता हूं, तो दृष्टिकोण के लिए कौन से पैटर्न सबसे उपयुक्त हैं?
मेरे दृष्टिकोण पर किसी भी विचार और टिप्पणी का स्वागत किया जाता है। किसी भी प्रकार के बेहतर समाधान (पैटर्न, सिद्धांत, मेरे कोड या मॉडल आदि की बेहतर वास्तुकला)।
संपादित करें:
एक और अड़चन है, इसमें मैं एक ORM का उपयोग कर रहा हूँ DB से मानचित्रण करने के लिए दृढ़ता वस्तु पर, इसलिए उस स्तर पर अशक्त जांच करने से काम नहीं चलेगा (क्योंकि समान वस्तुओं का उपयोग उन भागों में किया जाता है जहाँ नल कोई नुकसान नहीं करता है । मैंने इसे इसलिए जोड़ा क्योंकि अब तक दिए गए जवाबों में इस विकल्प का उल्लेख है।