मैंने इन सभी वर्षों में ओओपी सिद्धांत "बताओ, मत पूछो" अनदेखा कर दिया होगा क्योंकि मैंने पहली बार कुछ दिनों पहले इसके बारे में सीखा था।क्या उपयोगकर्ता इनपुट सत्यापन पर "बताएं, मत पूछें" लागू होते हैं?
लेकिन संदर्भ सत्यापन कोड के बारे में एक चर्चा थी जिसे एएसपी.नेट वेब फॉर्म पेज से बाहर ले जाया गया था और डेटा/व्यापार ऑब्जेक्ट में स्थानांतरित किया गया था, और वहां कोई "मान्य()" विधि नहीं थी, केवल एक सहेजने की विधि स्वयं ने सत्यापन किया और (माना जाता है) एक अपवाद उठाया। मैंने पूछा कि यह इस तरह से क्यों डिजाइन किया गया था और मुझे ओओपी के "बताओ, मत पूछो" सिद्धांत के लिए निर्देशित किया गया था, जिसे मैंने कभी नहीं सुना था, इसलिए हमने Google पर एक साथ देखा और मुझे तुरंत शिक्षित किया गया। ;)
फिर भी, कुछ सही गंध नहीं करता है, इसे उपयोगकर्ता से दूर करने से पहले डेटा को स्क्रब किया जाना चाहिए और व्यापार परत में जहां इसे संसाधित और/या एकत्रित किया जाता है, बजाय दूसरी तरफ ? मैं उलझन में हूं कि यह कैसे अच्छी डिजाइन के लिए बनाता है।
ऐसा लगता है कि "बताओ, मत पूछो" के नियम इस बात से संबंधित हैं कि आपको लक्षित वस्तु के राज्य के बारे में लक्ष्य वस्तु से नहीं पूछना चाहिए, और यह सिद्धांत कभी भी डेटा पर लागू करने के लिए नहीं था लक्षित वस्तु से पारित किया जा रहा है।
अप्रत्याशित मामलों को संभालने के लिए अपवाद ठीक हैं (स्मृति/डिस्क पूर्ण/कनेक्शन बंद/वितरित लेनदेन विफल है) - उपयोगकर्ता द्वारा सबमिट किए गए डेटा को सत्यापित करना अप्रत्याशित नहीं है। इसके बजाय "हैंडलर" दृष्टिकोण का उपयोग करें - बस validate_number (invalid_handler_callback) पर कॉल करें –