2008-09-26 13 views
7

एक मानक रूपरेखा (शायद उद्यम लाइब्रेरी का हिस्सा है ... या खुद नेट) है कि विधि का श्रेय में आप सामान्य पैरामीटर सत्यापन करने की अनुमति देता है?क्या .NET पैरामीटर सत्यापन के लिए मानक फ्रेमवर्क है जो गुणों का उपयोग करता है?

उत्तर

4

Microsoft Code Contracts, जो 4.0 सीटीपी के बाद से .NET Framework का हिस्सा हैं और स्टैंड-अलोन पैकेज के रूप में पहले .NET Framework संस्करणों के लिए उपलब्ध हैं, कोडिंग मान्यताओं को निर्दिष्ट करने की अनुमति देते हैं। इसमें पूर्व-स्थितियों को निर्दिष्ट करना शामिल है जो पैरामीटर को सत्यापित कर सकते हैं।

पैरामीटर की जाँच के लिए एक उदाहरण का उपयोग करें (Code Contracts documentation से नकल) किया जाएगा:

public Rational(int numerator, int denominator) 
{ 
    Contract.Requires(denominator ! = 0); 

    this.numerator = numerator; 
    this.denominator = denominator; 
} 

कोड संविदा उपयोग करने का लाभ यह है कि यह एक पुस्तकालय जो भविष्य .नेट फ्रेमवर्क विज्ञप्ति का हिस्सा होगा है, इसलिए जितनी जल्दी है या बाद में आपके आवेदन में एक निर्भरता कम होगी।

संपादित करें: बस ध्यान दिया गया है कि आप विशेष रूप से एक पुस्तकालय के लिए पूछ रहे हैं जो तर्क जांच के लिए गुणों का उपयोग करता है ... कोड संविदा नहीं करता है। कारण है कि कोड संविदा विशेषताओं का उपयोग नहीं करता है उनके FAQ में सूचीबद्ध है:

कस्टम विशेषताओं को उपयोग करने का लाभ यह है कि वे कोड बिल्कुल प्रभावित नहीं करते है। हालांकि, विधि का उपयोग कर के लाभ कॉल दूर विशेषताओं में से मालूम होता है प्राकृतिक पहली पसंद पल्ला झुकना:

रनटाइम समर्थन: एक द्विआधारी rewriter के आधार पर बिना, विशेषताओं के साथ व्यक्त ठेके रनटाइम पर लागू नहीं किया जा सकता है। इसका मतलब यह है कि अगर कोई पूर्व शर्त (या अन्य ठेके) आप क्रम पर लागू चाहते हैं, या तो आप कोड में ठेके नकल करने की जरूरत है या फिर अपने निर्माण की प्रक्रिया में एक द्विआधारी rewriter शामिल हैं। अनुबंध। आवश्यकताएं हमेशा घोषणात्मक अनुबंध के रूप में और रनटाइम-चेक सत्यापन के रूप में कार्य करती हैं। पार्सिंग के लिए

आवश्यकता: के बाद से मानों कस्टम विशेषताओं के साथ इस्तेमाल किया जा सकता सीमित हैं, की स्थिति खत्म हो तारों के रूप में एन्कोड किया जा रहा। यह है कि सभी स्रोत भाषाओं के लिए उपयुक्त है एक नई भाषा को परिभाषित करने की आवश्यकता है,, तार पार्स किया जा सकता की आवश्यकता कार्यक्षमता संकलक पहले से ही पास के सभी डुप्लिकेट।

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

+0

अच्छे अंक फिर से: विशेषताएं –

1

Dynamic Data ASP.NET (और ASP.NET MVC) के लिए आप विशेषताओं का उपयोग मॉडल गुणों के लिए मान्यता काम करने दिया।

7

माइक्रोसॉफ्ट उद्यम लाइब्रेरी जो मान्यता का उपयोग कर विशेषताओं की अनुमति देता है Microsoft.Practices.EnterpriseLibrary.Validation पुस्तकालय/नाम स्थान है।

+1

धन्यवाद !!!! <- एकाधिक! 10 चरित्र आवश्यकता के कारण :) –

1

तुम भी postsharp का उपयोग करें और सत्यापन के लिए अपने स्वयं के गुण को लागू कर सकते हैं।

2

का उपयोग कर एक उदाहरण है माइक्रोसॉफ्ट कोड संविदा थोड़ी देर के लिए बाहर हैं, वे अभी भी एमएस रिसर्च में होस्ट कर रहे हैं और आप के लिए विन्यास (app.config/डेटाबेस आदि) का उपयोग नहीं कर सकते नियम चालू/बंद या यहां तक ​​कि नियमों को भी बदलें। मेरी लाइब्रेरी Bouncer घोषणात्मक नियम परिभाषा प्रदान करती है: स्रोत कोड या ऐप में विशेषताएँ।इकाई वर्ग/संपत्ति स्तर पर नियमों के लिए कॉन्फ़िगर प्रविष्टियां। लाइब्रेरी एलजीपीएल के तहत ओपनसोर्स है (आप इसे वाणिज्यिक उत्पादों में आसानी से उपयोग कर सकते हैं)। यदि आप app.config के माध्यम से नियमों को कॉन्फ़िगर करते हैं तो आप रीकंपाइल की आवश्यकता के बिना नियम सेटिंग्स को समायोजित कर सकते हैं।

संबंधित मुद्दे