डेटा इनपुट सत्यापन हमेशा मेरे लिए काफी आंतरिक संघर्ष था।
एक वास्तविक सुरक्षा ढांचे और कोड को हमारे विरासत अनुप्रयोग को फिर से लिखने की परियोजना के कगार पर (जो अब तक बहुत ज्यादा कार्ड-महल-मजबूत विरासत सुरक्षा कोड और डेटा सत्यापन रखता है), मैं फिर से सोच रहा हूं कि मुझे कितना मान्य करना चाहिए, कहाँ, आदि
पेशेवर जावा डेवलपर के रूप में मेरे 5 वर्षों में, मैंने डेटा इनपुट सत्यापन और सुरक्षा उपायों के लिए अपने व्यक्तिगत नियमों को बनाया और परिष्कृत किया। जैसा कि मैं अपने तरीकों में सुधार करना चाहता हूं, मैं आप लोगों से कुछ विचार सुनना चाहता हूं। सामान्य नियम और प्रक्रियाएँ ठीक हैं, और जावा-विशिष्ट भी हैं।
संक्षेप में, ये मेरे दिशा-निर्देश हैं (3-स्तरीय वेब एप्लिकेशन शैली पर) संक्षिप्त विवरण के साथ:
1 स्तरीय ग्राहक पक्ष (ब्राउज़र): न्यूनतम सत्यापन, केवल अपरिवर्तनीय नियम (अनिवार्य ईमेल फ़ील्ड, एक आइटम और इस तरह का चयन करना होगा); अतिरिक्त सत्यापन का उपयोग जैसे "6 और 20 वर्णों के बीच" कम लगातार, क्योंकि इससे परिवर्तनों पर रखरखाव का काम बढ़ता है (व्यापार कोड स्थिर होने पर जोड़ा जा सकता है);
1 टियर सर्वर साइड (वेब कम्युनिकेशन हैंडलिंग, "कंट्रोलर"): मेरे पास इसके लिए कोई नियम नहीं है, लेकिन मेरा मानना है कि केवल डेटा हेरफेर और असेंबली / पार्सिंग त्रुटियों को यहां संभाला जाना चाहिए (जन्मदिन का क्षेत्र एक वैध तारीख नहीं है); यहाँ आगे सत्यापन को जोड़ना आसानी से एक उबाऊ प्रक्रिया है;
2 टीयर (व्यावसायिक परत): रॉक सॉलिड वेलिडेशन, कम नहीं; इनपुट डेटा फॉर्मेट, रेंज, वैल्यूज़, इंटरनल स्टेट चेकिंग अगर मेथड को कभी भी कॉल नहीं किया जा सकता है, तो यूजर रोल्स / परमिशन, इत्यादि; जितना संभव हो उतना कम उपयोगकर्ता इनपुट डेटा का उपयोग करें, यदि आवश्यक हो तो इसे डेटाबेस से फिर से प्राप्त करें; अगर हम पुनर्प्राप्त डेटाबेस डेटा को इनपुट के रूप में भी मानते हैं, तो मैं केवल इसे मान्य करूंगा यदि कुछ विशिष्ट डेटा को DB पर अविश्वसनीय या भ्रष्ट माना जाता है - मजबूत टाइपिंग यहां अधिकांश काम करता है, IMHO;
3 टीयर (डेटा लेयर / DAL / DAO): कभी नहीं माना जाता है कि यहाँ पर बहुत अधिक सत्यापन की आवश्यकता नहीं है, क्योंकि डेटा तक पहुँचने के लिए केवल व्यवसायिक लेयर को माना जाता है (शायद कुछ मामले जैसे "param2 null नहीं होना चाहिए अगर param1 सत्य है); हालाँकि, जब मेरा मतलब है कि "यहाँ" मेरा मतलब है "कोड" जो डेटाबेस तक पहुँच "या" SQL- निष्पादन विधियों ", डेटाबेस ही पूरी तरह से विपरीत है;
डेटाबेस (डेटा मॉडल): अच्छे प्राथमिक कुंजी, विदेशी कुंजी, बाधाओं, डेटा प्रकार / लंबाई / आकार के साथ डीबी पर गलत और भ्रष्ट डेटा से बचने के लिए उतना ही बेहतर, मजबूत और आत्म-सक्षम होना चाहिए। / परिशुद्धता और इतने पर - मैं इससे बाहर ट्रिगर्स छोड़ रहा हूं, क्योंकि उनकी अपनी निजी चर्चा है।
मुझे पता है कि प्रारंभिक डेटा सत्यापन अच्छा है और प्रदर्शन-वार है, लेकिन दोहराया डेटा सत्यापन एक उबाऊ प्रक्रिया है, और मैं मानता हूं कि डेटा सत्यापन स्वयं काफी कष्टप्रद है। इसलिए बहुत सारे कोडर इसे छोड़ देते हैं या इसे आधा कर देते हैं। इसके अलावा, हर डुप्लिकेट मान्यता एक संभावित बग है यदि वे हर समय सिंक्रनाइज़ नहीं किए जाते हैं। वे मुख्य कारण हैं जो मैं आजकल पसंद कर रहा हूं, समय-सीमा, बैंडविड्थ और सीपीयू की कीमत पर अधिकांश मान्यताओं को व्यवसाय के स्तर तक, अपवाद-दर-मामला आधार पर संभाला जाता है।
तो आप इस बारे मे क्या सोचते हैं? विपरीत राय? क्या आपके पास अन्य प्रक्रियाएं हैं? ऐसे विषय का संदर्भ? कोई भी योगदान मान्य है।
नोट: यदि आप चीजों को करने के जावा तरीके के बारे में सोच रहे हैं, तो हमारा ऐप स्प्रिंग स्प्रिंग एमवीसी और मायबैटिस के साथ आधारित है (प्रदर्शन और खराब डेटाबेस मॉडल ओआरएम समाधानों से शासन करता है); मैं हमारे सुरक्षा प्रदाता प्लस JSR 303 (हाइबरनेट वैलिडेटर) के रूप में स्प्रिंग सिक्योरिटी को जोड़ने की योजना बना रहा हूं?
धन्यवाद!
संपादित करें: 3 परत पर कुछ अतिरिक्त स्पष्टीकरण।