मैं अक्सर डीडीडी में Invariants शब्द देखता हूं। Here डिनो एस्पोजिटो इसके बारे में बात करता है। अगर मैं .NET लाइब्रेरी को देखता हूं, तो मुझे ValidationAttribute कक्षा दिखाई देती है। Invariants और सत्यापन नियम समान हैं? उदाहरण के लिए, क्या मैं कह सकता हूं 50% छूट केवल तभी उपलब्ध है जब ऑर्डर कुल $ 250 से अधिक एक Invariant है?Invariants और सत्यापन नियमों के बीच क्या अंतर है?
या वे अलग हैं जहां इनवेंटर्स को किसी ऑब्जेक्ट को अमान्य होने और सत्यापन करने से बचाने के लिए ऑब्जेक्ट की वैधता की जांच करना है, यह इसके राज्य को बदलने के बाद भी है (यह वैध या अमान्य स्थिति में हो सकता है)? उपर्युक्त उदाहरण में, यदि मैं इनवेरिएंट का उपयोग करता हूं, तो मैं छूट को अपडेट करने से पहले और सत्यापन के मामले में आविष्कार की जांच करता हूं, मैं 50% छूट लागू करता हूं और फिर वैधता की जांच करता हूं (ऑब्जेक्ट पहले से ही अमान्य स्थिति में है)।
हालांकि कुछ लोग हैं जो डोमेन इनवेरिएंट के रूप में कुछ बुनियादी सत्यापन नियमों पर विचार नहीं करेंगे क्योंकि वे आमतौर पर तकनीकी बाधाओं से प्राप्त नियम हैं। उदाहरण के लिए, किसी ईमेल पते की अधिकतम लंबाई को कुछ डीडीडी चिकित्सकों द्वारा व्यावसायिक आविष्कार के रूप में नहीं माना जा सकता है क्योंकि व्यवसाय किसी ईमेल की लंबाई की परवाह नहीं करता है, लेकिन व्यावहारिक होने के लिए तकनीकी बाधा निर्धारित की जानी चाहिए (उदाहरण के लिए डीबी में 'वर्चर (500)' चूंकि आप प्रत्येक क्षेत्र के लिए 'वर्कर (अधिकतम)' का उपयोग नहीं कर सकते हैं या प्रत्येक डीबी का अधिकतम पंक्ति आकार अतिप्रवाह होगा)। – plalx
इसलिए, कोई तर्क दे सकता है कि 'email.length <= 500' एक invariant नहीं है और डेटाबेस को चेक प्रतिनिधि का निर्णय ले सकता है। हालांकि, अधिकांश डीबी इस कॉलम को बहने वाले भी नहीं बताएंगे, जो डोमेन के भीतर नियम लागू करने के लिए एक तर्क हो सकता है। – plalx
चूंकि उस भिन्नता 'इनवेरिएंट' और 'सत्यापन' के बीच स्पष्ट है, क्या 'इनवेरिएंट' को 'विनिर्देश' भी कहा जा सकता है? मैं 'invariants' के खिलाफ डोमेन ऑब्जेक्ट्स का परीक्षण करने की लाइन में और सोच रहा हूं। –