7

DataAnnotations बनाम IDataErrorInfoDataAnnotations बनाम IDataErrorInfo

पेशेवरों और दोनों की विपक्ष? दूसरे के लाभ एक दूसरे से? (विशेष रूप से एमवीसी से संबंधित)

उत्तर

6

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

मुझे पहले अपने विकल्पों को संक्षेप में प्रस्तुत करते हैं: -

1) IDataErrorInfo लागू करने के लिए सरल है। आपको बस अपनी मॉडल कक्षा में IDataErrorInfo प्राप्त करना है। पकड़ यह है कि आप अपने मॉडल को अपने व्यापार नियमों को लागू करने के लिए बाध्यकारी दे रहे हैं। व्यापार नियमों को मॉडल द्वारा लागू किया जाना चाहिए। IDataErrorInfo (और इसी तरह DataAnnotations के लिए) के लिए अन्य पकड़ कि (Steven Sanderson's book से टीका यह केवल एक प्रॉपर्टी से संबंधित या whle ऑब्जेक्ट मॉडल से संबंधित कई त्रुटियों में अनेक त्रुटियां रिपोर्ट नहीं कर सके।

2) है मेरे लिए DataAnnotation, की तरह है एक स्कीमा चेक (सत्यापन)। यह पहला चेक है कि आपके आवेदन को करना चाहिए। हालांकि (आईएमएचओ), यह आपके व्यावसायिक नियमों को लागू करने के लिए उपयुक्त नहीं है।

3) अपनी खुद की ModelBinder को लागू करें। हालांकि इस किया जा सकता है, लेकिन गंभीरता से बात करते हुए ModelBinder के उपयोग को पार्स और अपने मॉडल के लिए अपने डेटा को बाध्य करने और जटिल सत्यापन और व्यापार नियम जांच करने के लिए नहीं है। मैं आपके मॉडल/डोमेन परत में व्यावसायिक नियमों को लागू करने के लिए चेक छोड़ दूंगा।

4) अपनी खुद की रोल करें - एक सेवा परत के साथ मान्य (this देखें। दिखाया गया उदाहरण एक इंटरफ़ेस वर्ग का उपयोग कर नियंत्रक और मॉडल राज्य से decoupling का लाभ है। दूसरा विकल्प आपके मॉडल परत से उपयुक्त अपवाद फेंकना है बाद का विकल्प उपयोगी होता है जब आप अपनी सेवा परत को एक अलग एप्लिकेशन (जैसे डब्लूसीएफ एप्लीकेशन) में कार्यान्वित करते हैं।

आपको क्या लगता है? एक मध्यम से बड़े आकार की परियोजना के लिए, उपर्युक्त विकल्पों में से कौन सा आपने उपयोग किया है (या अपनाने का इरादा) और क्यों?

चीयर्स

+0

बिंदु 1 पर, मुझे विश्वास है कि INotifyDataErrorInfo नेट 4.5 में समर्थन किया जाएगा और है कि एक ही प्रॉपर्टी के लिए अनेक त्रुटियों को संभालती है। –

5

ऐसा लगता है कि डेटा एनीमेशन को एमवीसी 2.0 में आधिकारिक समर्थन मिल रहा है। स्कॉट गुथरी ने डाटा एन्नोटेशन का उपयोग करके 2.0 में मॉडल सत्यापन करने पर good article प्रकाशित किया। यह देखते हुए कि टीम इस दिशा का नेतृत्व करती है, तो आप इसके पक्ष में एक वोट मान सकते हैं।

4

डेटाअनोटेशन लागू करना आसान है, और एमवीसी 2.0 में सीधे समर्थन प्राप्त करना आसान है।

हालांकि, IDataErrorInfo आपको अधिक जटिल सत्यापन (यानी: सत्यापन जो एकाधिक गुणों को उत्पन्न करता है) आदि करने की अनुमति देता है।

दो मिलाया जा सकता है और एक साथ इस्तेमाल किया, लेकिन। दोनों तकनीकों को लागू करने से आपको रोक नहीं है।

+0

यह भी possi है IVADALATableObject इंटरफ़ेस का उपयोग कर ComponentModel.DataAnnotations के साथ ble। इस इंटरफ़ेस के साथ आप एक सत्यापन भी कर सकते हैं जो एकाधिक गुणों को जन्म देता है। –