2010-06-05 17 views
15

क्या कोई मुझे बता सकता है कि डब्ल्यूपीएफ में सत्यापन के लिए एक बेहतर तरीका कौन सा है।IDataErrorInfo बनाम सत्यापनकरण बनाम अपवाद

  1. कार्यान्वयन IDataErrorInfo
  2. ValidationRule बनाना
  3. फेंक अपवाद

प्रदर्शन, मेमोरी लीक, कोड रख-रखाव और फिर से उपयोग के संदर्भ में।

उत्तर

20

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

  • प्रदर्शन:: लेकिन, यहां मेरी समझ है, जब तक आपके अन्य कार्यान्वयन खराब कर रहे हैं अपवाद लगभग हर बार खो देंगे। फेंक/पकड़ चक्र के लिए महत्वपूर्ण ओवरहेड है। (Anecdote: मेरे पास 'एक संख्या होना चाहिए' चेक था जो अपवाद था, यह असफल होने के लिए यूआई को "ध्यान में रखता था", लेकिन जब सत्यापन प्रमाणीकरण में परिवर्तित किया गया तो यह प्रभावी रूप से तत्काल था।)
  • मेमोरी लीक: यह इस बात पर निर्भर करता है कि आपके सत्यापन नियम या IDataErrorInfo कार्यान्वयन कैसे किए जाते हैं।
  • कोड रखरखाव, का पुन: उपयोग करें: यह दिलचस्प भूमिका है। आपको वास्तव में क्या पूछना चाहिए, "IDataErrorInfo के बजाय ValidationRule का उपयोग करना उचित है या इसके विपरीत?"

प्रमाणीकरण नियम IDataErrorInfo से पुराने हैं (मुझे विश्वास है कि उत्तरार्द्ध .NET 3.5 में पेश किया गया था)। अकेले इस पर आधारित, ऐसा लगता है कि डब्ल्यूपीएफ टीम IDataErrorInfo पसंद करती है। लेकिन सच्चाई यह है कि वे अलग-अलग चीजों के लिए बनाई गई हैं। यदि आपके पास एमवीवीएम या समकक्ष पैटर्न है, तो मॉडल (जैसे, कहें, ऋणात्मक आयु) में त्रुटियों के लिए IDataErrorInfo बेहतर है, जबकि (कहें, age की आयु) में त्रुटियों के लिए प्रमाणीकरण नियम बेहतर हैं। यह निश्चित रूप से संभव है कि प्रमाणीकरण नियम "व्यापार तर्क" जांच करें, या IDataErrorInfo आपको "एक यूनिकोड स्नोमैन वैध आयु नहीं है" कहने के लिए संभव है, लेकिन आप इस पैटर्न को बनाए रखकर (संभवतः) सर्वोत्तम रखरखाव प्राप्त करेंगे।

लेकिन आरंभिक परीक्षण से परे सत्यापन के लिए अपवादों का उपयोग न करें यह देखने के लिए कि आपको किन स्थितियों का परीक्षण करना चाहिए।

+4

आज IDataErrorInfo पर पढ़ रहा था - यह ValidationRule से अधिक पुराना है लगता है - लगता है IDataErrorInfo इंटरफेस फ्रेमवर्क 1.1 (http://msdn.microsoft.com/en-us/library/system.componentmodel.idataerrorinfo_properties के बाद से आसपास किया गया है (v = VS.71) .aspx) लेकिन फ्रेमवर्क 3.0 के बाद प्रमाणीकरण नियम। ऐसा मत सोचो कि यह मौलिक रूप से आपका जवाब बदलता है – GrahamMc

3

त्रुटि प्रबंधन के लिए अपवाद का उपयोग करना अच्छा नहीं है। अपवाद का उपयोग प्रदर्शन को कम करेगा। यह IDataErrorInfo का चयन और कार्यान्वयन या वैधकरण नियम बनाने का विषय है।

IDataErrorInfo

  • मान्यता तर्क दृश्य मॉडल और आसान में रखने को लागू करने और viewmodel में सभी क्षेत्रों पर बनाए रखने के
  • पूर्ण नियंत्रण के लिए

मान्यता नियम

  • अलग-अलग वर्ग
  • में सत्यापन नियम को पुन: प्रयोज्यता बढ़ाएं। उदाहरण के लिए आप आवश्यक फ़ील्ड सत्यापन कक्षा को लागू कर सकते हैं, इसे पूरे एप्लिकेशन में पुन: उपयोग करें।

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

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