2015-05-12 6 views
6

मैं अक्सर डीडीडी में Invariants शब्द देखता हूं। Here डिनो एस्पोजिटो इसके बारे में बात करता है। अगर मैं .NET लाइब्रेरी को देखता हूं, तो मुझे ValidationAttribute कक्षा दिखाई देती है। Invariants और सत्यापन नियम समान हैं? उदाहरण के लिए, क्या मैं कह सकता हूं 50% छूट केवल तभी उपलब्ध है जब ऑर्डर कुल $ 250 से अधिक एक Invariant है?Invariants और सत्यापन नियमों के बीच क्या अंतर है?

या वे अलग हैं जहां इनवेंटर्स को किसी ऑब्जेक्ट को अमान्य होने और सत्यापन करने से बचाने के लिए ऑब्जेक्ट की वैधता की जांच करना है, यह इसके राज्य को बदलने के बाद भी है (यह वैध या अमान्य स्थिति में हो सकता है)? उपर्युक्त उदाहरण में, यदि मैं इनवेरिएंट का उपयोग करता हूं, तो मैं छूट को अपडेट करने से पहले और सत्यापन के मामले में आविष्कार की जांच करता हूं, मैं 50% छूट लागू करता हूं और फिर वैधता की जांच करता हूं (ऑब्जेक्ट पहले से ही अमान्य स्थिति में है)।

उत्तर

8

बिल्कुल, प्रमाणीकरण किसी दिए गए ऑब्जेक्ट स्थिति को अनुमोदित करने की प्रक्रिया है, जबकि उस राज्य से पहले भी अस्तित्व में प्रवर्तन होता है।

एक अनुशासनिक यह है कि आविष्कार प्रवर्तन सर्वोत्तम रूप से उस चीज द्वारा किया जाता है जिसे एक आत्म-सुरक्षा प्रतिबिंब की तरह उत्परिवर्तित (या बनाया गया) किया जाता है, जबकि सत्यापन आमतौर पर किसी तीसरे पक्ष द्वारा किया जाता है।

Always valid विचार के स्कूल सत्यापन पर आविष्कारों के उपयोग की वकालत करते हैं। मुझे लगता है कि यह डीडीडी और एग्रीगेट्स के साथ पूरी तरह से चला जाता है।

+3

हालांकि कुछ लोग हैं जो डोमेन इनवेरिएंट के रूप में कुछ बुनियादी सत्यापन नियमों पर विचार नहीं करेंगे क्योंकि वे आमतौर पर तकनीकी बाधाओं से प्राप्त नियम हैं। उदाहरण के लिए, किसी ईमेल पते की अधिकतम लंबाई को कुछ डीडीडी चिकित्सकों द्वारा व्यावसायिक आविष्कार के रूप में नहीं माना जा सकता है क्योंकि व्यवसाय किसी ईमेल की लंबाई की परवाह नहीं करता है, लेकिन व्यावहारिक होने के लिए तकनीकी बाधा निर्धारित की जानी चाहिए (उदाहरण के लिए डीबी में 'वर्चर (500)' चूंकि आप प्रत्येक क्षेत्र के लिए 'वर्कर (अधिकतम)' का उपयोग नहीं कर सकते हैं या प्रत्येक डीबी का अधिकतम पंक्ति आकार अतिप्रवाह होगा)। – plalx

+0

इसलिए, कोई तर्क दे सकता है कि 'email.length <= 500' एक invariant नहीं है और डेटाबेस को चेक प्रतिनिधि का निर्णय ले सकता है। हालांकि, अधिकांश डीबी इस कॉलम को बहने वाले भी नहीं बताएंगे, जो डोमेन के भीतर नियम लागू करने के लिए एक तर्क हो सकता है। – plalx

+0

चूंकि उस भिन्नता 'इनवेरिएंट' और 'सत्यापन' के बीच स्पष्ट है, क्या 'इनवेरिएंट' को 'विनिर्देश' भी कहा जा सकता है? मैं 'invariants' के खिलाफ डोमेन ऑब्जेक्ट्स का परीक्षण करने की लाइन में और सोच रहा हूं। –

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