गेटर / सेटर या अन्य जगहों में डेटा सत्यापन?

मैं सोच रहा हूं कि प्राप्तकर्ता और सेटर्स , या कोड में कहीं और सत्यापन बनाने का अच्छा विचार है।

यह आश्चर्यचकित हो सकता है कि जब आप अनुकूलन और गतिशील कोड को देखते हैं, तो मुझे लगता है कि आपको गेटर्स और सेटर्स में सत्यापन नहीं करना चाहिए, लेकिन उस कोड में जहां आप हैं अपनी फ़ाइलों या डेटाबेस अपडेट करना । क्या मै गलत हु?

0
जोड़ा संपादित
विचारों: 4

8 उत्तर

खैर, रेनॉन्स में से एक क्यों कक्षाओं में आम तौर पर सार्वजनिक गेटर्स / सेटर्स के साथ निजी सदस्य होते हैं क्योंकि वे डेटा सत्यापित कर सकते हैं।

यदि आपके पास 1 और 100 के बीच की संख्या हो, तो मैं निश्चित रूप से उस सेटटर में कुछ डालूंगा जो उस को मान्य करता है और फिर कोड द्वारा पकड़ा जा रहा अपवाद फेंक सकता है। कारण सरल है: यदि आप इसे सेटटर में नहीं करते हैं, तो आपको याद रखना होगा कि हर बार जब आप इसे सेट करते हैं तो 1 से 100 सीमा, जो डुप्लिकेट कोड की ओर जाता है या जब आप इसे भूल जाते हैं, तो यह एक अमान्य स्थिति की ओर जाता है।

प्रदर्शन के लिए, मैं यहां Knuth के साथ हूँ:

"हमें छोटी क्षमता के बारे में भूल जाना चाहिए, समय के बारे में 9 7% कहें: समयपूर्व अनुकूलन सभी बुराइयों की जड़ है।"

0
जोड़ा

@ टेरापिन, फिर से:

यदि आपके पास सब कुछ है [सरल   सार्वजनिक सेट / प्राप्त] गुण ... वे   क्षेत्र भी हो सकता है

गुणों के क्षेत्र में अन्य फायदे हैं। वे एक अधिक स्पष्ट अनुबंध हैं, वे क्रमबद्ध हैं, उन्हें बाद में डीबग किया जा सकता है, वे विरासत के माध्यम से विस्तार के लिए एक अच्छी जगह हैं। क्लंकियर सिंटैक्स एक आकस्मिक जटिलता है - उदाहरण के लिए नेट 3.5 इस पर विजय प्राप्त करता है।

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

0
जोड़ा

प्रमाणीकरण विधि में गेटर्स या सेटर्स से अलग-अलग सत्यापन किया जाना चाहिए। इस तरह यदि सत्यापन को कई घटकों में पुन: उपयोग करने की आवश्यकता है, तो यह उपलब्ध है।

जब सेटर कहा जाता है, तो इस तरह की सत्यापन सेवा का उपयोग वस्तु में इनपुट को स्वच्छ करने के लिए किया जाना चाहिए। इस तरह आप जानते हैं कि किसी ऑब्जेक्ट में संग्रहीत सभी जानकारी हमेशा वैध होती है।

आपको गेटटर के लिए किसी भी तरह की सत्यापन की आवश्यकता नहीं है, क्योंकि ऑब्जेक्ट पर जानकारी पहले से मान्य होने के लिए भरोसेमंद है।

डेटाबेस अपडेट तक अपना सत्यापन सहेज न करें !! तेजी से विफल के लिए बेहतर है।

0
जोड़ा
क्या आप विस्तारित कर सकते हैं? क्या आप उदाहरण के लिए एक अलग सत्यापन विधि में <5 &&> 0 की जांच कर रहे हैं? फिर आपके गेटर्स और सेटर्स वास्तव में क्या कर रहे हैं जो एक नियमित क्षेत्र नहीं है?
जोड़ा लेखक Boris Callens, स्रोत

सबसे रखरखाव कोड रखने के परिप्रेक्ष्य से, मुझे लगता है कि आपको संपत्ति के सेटटर में उतना ही सत्यापन करना चाहिए जितना आप कर सकते हैं। इस तरह आप अमान्य डेटा से कैशिंग या अन्यथा व्यवहार नहीं करेंगे।

आखिरकार, यह संपत्ति के लिए क्या मतलब है। यदि आपके पास संपत्तियों का एक गुच्छा है ...

public string Name
{
    get
    {
        return _name;
    }
    set
    {
        _name = value;
    }
}

... वे मैदान भी हो सकते हैं

0
जोड़ा

निर्भर करता है।

आम तौर पर, कोड तेजी से विफल होना चाहिए। यदि मान कोड में एकाधिक बिंदुओं द्वारा सेट किया जा सकता है और आप मान को पुनर्प्राप्त करने के बाद ही सत्यापित करते हैं, तो बग उस कोड में प्रतीत होता है जो अद्यतन करता है। यदि सेटर्स इनपुट को मान्य करते हैं, तो आप जानते हैं कि कौन सा कोड अमान्य मान सेट करने का प्रयास कर रहा है।

0
जोड़ा

मैं अपनी ऑब्जेक्ट्स को अमान्य स्थिति में कभी भी जाने की कोशिश नहीं करता, इसलिए सेटर्स के पास निश्चित रूप से सत्यापन होगा और राज्य को बदलने वाले किसी भी तरीके के साथ। इस तरह, मुझे चिंता करने की ज़रूरत नहीं है कि जिस वस्तु से मैं निपट रहा हूं वह अमान्य है। यदि आप अपनी विधियों को सत्यापन सीमाओं के रूप में रखते हैं, तो आपको सत्यापन के ढांचे और IsValid() विधि कॉल के बारे में चिंता करने की ज़रूरत नहीं है, जो पूरे स्थान पर छिड़कते हैं।

0
जोड़ा

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

डब्ल्यूपीएफ के "ValidatesOnDataError" बाध्यकारी संपत्ति यह विशेष रूप से आसान बनाता है।

0
जोड़ा

आप एरिक इवांस द्वारा डोमेन संचालित डिज़ाइन को देखना चाहेंगे। डीडीडी में विशिष्टता की यह धारणा है:

... स्पष्ट अनुमानित-जैसे VALUE   विशेष उद्देश्यों के लिए उद्देश्य। ए   विनिर्देश एक अनुमान है कि   यह निर्धारित करता है कि कोई ऑब्जेक्ट करता है या करता है या नहीं   कुछ मानदंडों को पूरा न करें।

मुझे लगता है कि तेजी से असफल होना एक बात है, दूसरी बात यह है कि सत्यापन के लिए तर्क रखना है। डोमेन तर्क रखने के लिए सही जगह है और मुझे लगता है कि एक विशिष्टता ऑब्जेक्ट या आपके डोमेन ऑब्जेक्ट्स पर एक वैध विधि एक अच्छी जगह होगी।

0
जोड़ा