मनुष्य / सेटर में या कहीं और डाटा सत्यापन?

वोट
9

मैं सोच रहा हूँ अगर यह सुनिश्चित करने के लिए एक अच्छा विचार है सत्यापन में ही टिककर खेल और setters , या कोड में कहीं।

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

05/08/2008 को 20:51
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


8 जवाब

वोट
13

खैर, reaons क्यों वर्गों आमतौर पर सार्वजनिक getters / setters साथ निजी सदस्यों को शामिल में से एक वास्तव में, क्योंकि वे डेटा को सत्यापित कर सकते हैं।

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

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

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

05/08/2008 को 20:59
का स्रोत उपयोगकर्ता

वोट
4

@Terrapin, फिर से:

यदि सब क्या आपके पास [सरल सार्वजनिक सेट / प्राप्त] गुणों का एक समूह है ... वे के साथ-साथ खेतों हो सकता है

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

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

08/08/2008 को 01:07
का स्रोत उपयोगकर्ता

वोट
3

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

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

05/08/2008 को 20:59
का स्रोत उपयोगकर्ता

वोट
3

सबसे maintainable कोड होने के दृष्टिकोण से, मुझे लगता है कि आप के रूप में आप एक संपत्ति की सेटर में कर सकते हैं के रूप में ज्यादा मान्यता क्या करना चाहिए। इस तरह से आप ग्रहण कर रही हो जाएगा या यूं कहें कि अमान्य डेटा के साथ काम कर।

सब के बाद, यह है कि क्या गुण के लिए हैं है। यदि आप केवल इतना है की तरह गुण का एक समूह है ...

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

... वे के साथ-साथ खेतों हो सकता है

05/08/2008 को 20:59
का स्रोत उपयोगकर्ता

वोट
1

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

23/09/2008 को 20:44
का स्रोत उपयोगकर्ता

वोट
1

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

WPF के "ValidatesOnDataError" बाइंडिंग संपत्ति यह विशेष रूप से आसान बना देता है।

07/08/2008 को 23:24
का स्रोत उपयोगकर्ता

वोट
1

आप की जाँच करना चाहते हैं हो सकता है डोमेन प्रेरित डिजाइन , एरिक इवांस द्वारा। DDD एक विशिष्टता की इस धारणा है:

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

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

05/08/2008 को 21:03
का स्रोत उपयोगकर्ता

वोट
1

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

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

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

एक डेटाबेस अद्यतन जब तक आप अपने मान्यता न सहेजें !! यह बेहतर है तेजी से असफल

05/08/2008 को 20:55
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more