मैं कुछ रोचक प्रतिक्रियाओं के साथ एक संबंधित सवाल पाया:
Mapping Validation Attributes From Domain Entity to DTO
मैं इस बारे में सोच रहा है, और एक तरह से यह स्थिति के अनुरूप है हम सर्वर साइड के साथ है और क्लाइंट-साइड सत्यापन। (उदाहरण के लिए NHibernate Validator और jQuery.validate दोनों का उपयोग करना)।
इन दिनों यह बहुत अच्छी तरह से स्वीकार किया गया है कि आपके पास सर्वर-साइड सत्यापन का पूरा सेट होना चाहिए, और क्लाइंट-साइड सत्यापन जोड़ना एक विकल्प है जिसे आप अपने एप्लिकेशन को अधिक उपयोगकर्ता के अनुकूल बनाने के लिए चुन सकते हैं। ऐसा लगता था कि आपको अपने क्लाइंट-साइड सत्यापन को मैन्युअल रूप से कार्यान्वित करना था, लेकिन आपने उपयोगिता में लाभ के कारण काम की नकल स्वीकार कर ली।
मैं तर्क दूंगा कि हम यहां क्या कर रहे हैं, यह बहुत समान है। आप को अपनी डोमेन परत में सत्यापन करना चाहिए। आप हमेशा सत्यापन को जोड़ने के लिए उपभोग करने वाले अनुप्रयोगों पर भरोसा नहीं कर सकते हैं।
आपके पास आपके डीटीओ/दृश्य मॉडल पर सत्यापन जोड़ने के आपके आवेदन में विकल्प है। आप ऐसा इसलिए करते हैं क्योंकि उन्हें डोमेन में आने की बजाय दृश्य में त्रुटियों की त्रुटियों से निपटने के लिए और अधिक सहायक होता है जो अपवाद फेंक सकता है या कम सहायक त्रुटि संदेश दे सकता है। मुद्दा यह है कि डोमेन परिप्रेक्ष्य से आप इस पर भरोसा नहीं करते हैं। आप अभी भी अपने सिस्टम में आत्मविश्वास रखते हैं क्योंकि आप जानते हैं कि कोई बुरा डेटा प्राप्त होता है, तो आपका मॉडल इसे पकड़ लेगा।
क्लाइंट/सर्वर केस इन दिनों एक गैर-समस्या है क्योंकि इसे स्वचालित करने के लिए इतना काम किया गया है, सर्वर-साइड कोड से क्लाइंट-साइड कोड उत्पन्न करना (उदाहरण के लिए ASP.Net MVC में ModelValidatorProvider)। मेरा मानना है कि अधिक से अधिक लोग दृश्य मॉडल/डीटीओ का उपयोग करते हैं, इसलिए हम स्वचालित रूप से डीटीओ पर डोमेन सत्यापन को मैप करने के लिए समान समाधान देखना शुरू कर देंगे (it's already happening with AutoMapper)।
तो संक्षेप में, मेरी (बल्कि आदर्श से व्यावहारिक;)) जवाब है:
, अब के लिए सूखी के उल्लंघन स्वीकार दोनों ही स्थानों पर सत्यापन करते हैं, और परियोजनाओं है कि यह स्वचालित करने के लिए उद्देश्य के लिए योगदान करने की कोशिश भविष्य
स्रोत
2011-01-11 11:09:49
अच्छा बिंदु में। मैंने कोशिश करने और इसका समाधान करने के लिए अपने पिछले कुछ प्रश्नों पर ऐसा किया है। – nick