मैं एक ऐसी प्रणाली पर काम कर रहा हूं, जो प्रशासकों को उन फ़ील्ड्स को परिभाषित करने की अनुमति देती है जिनमें फ़ील्ड्स होते हैं। तब सिस्टम में डेटा दर्ज करने के लिए परिभाषित रूपों का उपयोग किया जाता है। कभी-कभी फॉर्म एक मानव द्वारा जीयूआई के माध्यम से भरे जाते हैं, कभी-कभी किसी अन्य सिस्टम द्वारा रिपोर्ट किए गए मूल्यों के आधार पर फॉर्म भरा जाता है।
प्रत्येक फ़ील्ड के लिए, व्यवस्थापक एक मान्यता नियम परिभाषित कर सकता है जो फ़ील्ड के लिए अनुमत मानों को सीमित करता है। सत्यापन नियम "फ़ील्ड में दर्ज किया गया मूल्य सही या गलत होना चाहिए" से "फ़ील्ड में दर्ज डेटाबेस में तालिका B के कॉलम A में मौजूद होना चाहिए" कुछ भी हो सकता है। प्रशासक किसी भी समय क्षेत्र के लिए मान्यता नियम को बदल सकता है।
इस परिदृश्य में, आपकी राय में यह सत्यापित करने के लिए सबसे उपयुक्त स्थान क्या है कि प्रत्येक फ़ील्ड सही तरीके से भरा गया है? मेरे पास वर्तमान में दो मुख्य दृष्टिकोण हैं:
विकल्प # 1: डोमेन मॉडल में मान्य करें
प्रत्येक फ़ील्ड ऑब्जेक्ट में व्यवस्थापक द्वारा निर्दिष्ट सत्यापन नियम होगा। फ़ील्ड ऑब्जेक्ट में एक IValidator का संदर्भ भी होगा। जब फ़ील्ड का मान सेट करने का प्रयास किया जाता है, तो फ़ील्ड दिए गए मान और सत्यापन नियम को IV अमान्यकर्ता को पास करेगा। यदि दिया गया मान मान्य नहीं है, तो मान्यकरण को जीयूआई / इंटरफ़ेस में उचित रूप से अन्य सिस्टम में फेंक दिया जाएगा।
पेशेवरों:
- फील्ड्स के खिलाफ मजबूत सुरक्षा गलती से मूल्यों को सौंपा गया है जो मान्यता नियम का उल्लंघन करते हैं
विपक्ष:
डेटा एक्सेस लेयर को सत्यापन को दरकिनार करने और वर्तमान वैधता नियम का उल्लंघन करने वाले फ़ील्ड्स बनाने में सक्षम होने की आवश्यकता है। प्रशासक एक क्षेत्र के लिए मान्यता नियम को बदलने के बावजूद, हमें अभी भी पुराने डेटा के आधार पर फ़ील्ड ऑब्जेक्ट्स का निर्माण करने में सक्षम होने की आवश्यकता है जैसे कि वर्षों पहले भरे गए फॉर्म को रेंडर करते समय। जब भी हम फ़ील्ड को स्टोर करते हैं, तो यह वर्तमान मान्यता नियम को संग्रहीत करके संभावित रूप से हल किया जा सकता है।
इस डिज़ाइन में, फ़ील्ड मॉडल में आईवीडिएटर के माध्यम से डेटा एक्सेस लेयर / रिपॉजिटरी के लिए एक अप्रत्यक्ष लिंक है। डोमेन मॉडल के लिए सेवाओं / रिपॉजिटरी का इंजेक्शन आमतौर पर लगता है ।
विकल्प # 2: एक सेवा में मान्य
यह सुनिश्चित करने का प्रयास करें कि फ़ील्ड सेवा का मान सेट करने के सभी प्रयास उस सेवा से गुजरते हैं जो सत्यापन नियम सुनिश्चित करता है। यदि मान्यता नियम का उल्लंघन किया जाता है, तो मान्यकरण अपवाद को फेंक दें।
बेशक, डेटा एक्सेस लेयर फ़ील्ड ऑब्जेक्ट्स बनाते समय सेवा का उपयोग नहीं करेगा जो पहले डीबी में बनाए गए हैं।
पेशेवरों:
"अपने डोमेन मॉडल में सेवाओं / प्रस्तावों को इंजेक्ट न करें" का उल्लंघन न करें।
फ़ील्ड को जारी रखने पर वर्तमान मान्यता नियम को बनाए रखने की आवश्यकता नहीं है। सेवा क्षेत्र के लिए वर्तमान मान्यता नियम को देख सकती है; जब इतिहास के आंकड़ों को देखते हैं, तो फ़ील्ड का मान नहीं बदला जाएगा।
विपक्ष:
- इस बात की कोई गारंटी नहीं है कि फील्ड वैल्यू सेट करने के लिए सर्विस का उपयोग करने वाले सभी तर्क वास्तव में ऐसा करते हैं। मैं इसे एक बड़ी कमी के रूप में देखता हूं; ऐसा लगता है कि कोई व्यक्ति "thisField.setValue (thatField.getValue ())" लिख रहा है और इसField के सत्यापन नियम का उल्लंघन किए बिना किसी का भी उल्लंघन हो सकता है। यह सुनिश्चित करने के लिए संभावित रूप से कम किया जा सकता है कि डेटा एक्सेस लेयर फ़ील्ड को बनाए रखने के लिए फ़ील्ड का मान सत्यापन नियम के साथ मेल खाता है।
मैं वर्तमान में विकल्प # 1 से अधिक विकल्प # 2 को पसंद करता हूं, मुख्य रूप से क्योंकि मैं इसे व्यावसायिक तर्क के रूप में देखता हूं और महसूस करता हूं कि विकल्प # 2 सिस्टम में खराब डेटा को पेश करने का अधिक जोखिम रखता है। आपको कौन सा विकल्प पसंद है, या क्या कोई अन्य डिज़ाइन है जो इस परिदृश्य को वर्णित दो विकल्पों से बेहतर है?
संपादित करें (मान्यताओं की जटिलता)
अभी जो सत्यापन मामले सामने आए हैं, वे अपेक्षाकृत सरल हैं; फ़ील्ड मान उदासीन होना चाहिए, दिनांक, समय के साथ दिनांक या डेटाबेस स्तंभ में मौजूदा मान होना चाहिए। हालांकि, मुझे धीरे-धीरे समय के साथ बढ़ने की जटिलता पर संदेह है। उदाहरण के लिए, वैधीकरण समाधान को अंतर्राष्ट्रीयकरण को ध्यान में रखकर बनाने की आवश्यकता है - डेट्स जैसी चीजें स्थानीय-विशिष्ट सिंटैक्स में इनपुट हो सकती हैं।
मैंने अभी के लिए विकल्प # 1 के साथ आगे बढ़ने का फैसला किया है, इस बात का ध्यान रखने की कोशिश की जाती है कि डोमेन मॉडल के लिए बहुत अधिक जिम्मेदारियों को नहीं सौंपा जाए। इसी तरह की स्थिति का सामना करने वाले भी संबंधित प्रश्नों की जांच कर सकते हैं कि स्तरित वास्तुकला और डेटा इनपुट सत्यापन में मान्यता और प्राधिकरण - कहां? कितना? ।