यह एक जटिल अनुरोध है, और ईमानदारी से यह शायद किसी और चीज से अधिक वरीयता के आधार पर भिन्न हो जाएगा।
- प्रदर्शन:: लेकिन, यहां मेरी समझ है, जब तक आपके अन्य कार्यान्वयन खराब कर रहे हैं अपवाद लगभग हर बार खो देंगे। फेंक/पकड़ चक्र के लिए महत्वपूर्ण ओवरहेड है। (Anecdote: मेरे पास 'एक संख्या होना चाहिए' चेक था जो अपवाद था, यह असफल होने के लिए यूआई को "ध्यान में रखता था", लेकिन जब सत्यापन प्रमाणीकरण में परिवर्तित किया गया तो यह प्रभावी रूप से तत्काल था।)
- मेमोरी लीक: यह इस बात पर निर्भर करता है कि आपके सत्यापन नियम या IDataErrorInfo कार्यान्वयन कैसे किए जाते हैं।
- कोड रखरखाव, का पुन: उपयोग करें: यह दिलचस्प भूमिका है। आपको वास्तव में क्या पूछना चाहिए, "IDataErrorInfo के बजाय ValidationRule का उपयोग करना उचित है या इसके विपरीत?"
प्रमाणीकरण नियम IDataErrorInfo से पुराने हैं (मुझे विश्वास है कि उत्तरार्द्ध .NET 3.5 में पेश किया गया था)। अकेले इस पर आधारित, ऐसा लगता है कि डब्ल्यूपीएफ टीम IDataErrorInfo पसंद करती है। लेकिन सच्चाई यह है कि वे अलग-अलग चीजों के लिए बनाई गई हैं। यदि आपके पास एमवीवीएम या समकक्ष पैटर्न है, तो मॉडल (जैसे, कहें, ऋणात्मक आयु) में त्रुटियों के लिए IDataErrorInfo बेहतर है, जबकि (कहें, age की आयु) में त्रुटियों के लिए प्रमाणीकरण नियम बेहतर हैं। यह निश्चित रूप से संभव है कि प्रमाणीकरण नियम "व्यापार तर्क" जांच करें, या IDataErrorInfo आपको "एक यूनिकोड स्नोमैन वैध आयु नहीं है" कहने के लिए संभव है, लेकिन आप इस पैटर्न को बनाए रखकर (संभवतः) सर्वोत्तम रखरखाव प्राप्त करेंगे।
लेकिन आरंभिक परीक्षण से परे सत्यापन के लिए अपवादों का उपयोग न करें यह देखने के लिए कि आपको किन स्थितियों का परीक्षण करना चाहिए।
आज IDataErrorInfo पर पढ़ रहा था - यह ValidationRule से अधिक पुराना है लगता है - लगता है IDataErrorInfo इंटरफेस फ्रेमवर्क 1.1 (http://msdn.microsoft.com/en-us/library/system.componentmodel.idataerrorinfo_properties के बाद से आसपास किया गया है (v = VS.71) .aspx) लेकिन फ्रेमवर्क 3.0 के बाद प्रमाणीकरण नियम। ऐसा मत सोचो कि यह मौलिक रूप से आपका जवाब बदलता है – GrahamMc