बड़ा अच्छा सवाल!
विश्व व्यापी वेब विकास के संदर्भ में, यदि आपने निम्नलिखित प्रश्न पूछे हों, तो भी।
"यदि खराब यूजर इनपुट को यूजर इंटरफेस से कंट्रोलर को सप्लाई किया जाता है, तो क्या कंट्रोलर को एक प्रकार के चक्रीय लूप में व्यू को अपडेट करना चाहिए, कमांड और इनपुट डेटा को प्रोसेस करने से पहले सटीक होना चाहिए ? कैसे? सामान्य के तहत अपडेट कैसे देखा जाता है? शर्तें? क्या किसी मॉडल को कसकर देखा जा सकता है? क्या उपयोगकर्ता इनपुट मॉडल के सत्यापन का मुख्य व्यवसाय तर्क है, या क्या यह इसके लिए प्रारंभिक है और इस प्रकार नियंत्रक के अंदर होना चाहिए (क्योंकि उपयोगकर्ता इनपुट डेटा अनुरोध का हिस्सा है)?
(जब तक अच्छा इनपुट हासिल न हो जाए, तब तक किसी मॉडल को तुरंत तैयार करने में देरी हो सकती है?)
मेरी राय है कि मॉडल को एक शुद्ध और प्राचीन परिस्थिति (जितना संभव हो सके) का प्रबंधन करना चाहिए, बुनियादी HTTP अनुरोध इनपुट सत्यापन से अप्रभावित होना चाहिए जो मॉडल तात्कालिकता से पहले घटित होना चाहिए (और निश्चित रूप से मॉडल को इनपुट डेटा मिलने से पहले)। चूंकि राज्य डेटा (लगातार, या अन्यथा) और एपीआई रिश्तों को प्रबंधित करना मॉडल की दुनिया है, नियंत्रक में बुनियादी HTTP अनुरोध इनपुट सत्यापन होने दें।
सारांश।
1) अपने मार्ग को मान्य करें (URL से पार्स किया गया), क्योंकि नियंत्रक और विधि मौजूद होना चाहिए इससे पहले कि कुछ और आगे बढ़ सके। यह वास्तविक नियंत्रक के सामने आने से पहले फ्रंट-कंट्रोलर दायरे (राउटर क्लास) में निश्चित रूप से होना चाहिए। ओह। :-)
2) एक मॉडल में इनपुट डेटा के कई स्रोत हो सकते हैं: एक HTTP अनुरोध, एक डेटाबेस, एक फ़ाइल, एक एपीआई और हां, एक नेटवर्क। यदि आप अपने सभी इनपुट सत्यापन को मॉडल में रखने जा रहे हैं, तो आप प्रोग्राम के लिए HTTP अनुरोध इनपुट सत्यापन को व्यावसायिक आवश्यकताओं का हिस्सा मानते हैं । मामला समाप्त।
3) फिर भी, अगर HTTP अनुरोध इनपुट अच्छा नहीं है , तो बहुत सी वस्तुओं को तत्काल खर्च करने के माध्यम से जाना मैओपिक है ! आप यह जान सकते हैं कि क्या ** HTTP अनुरोध इनपुट ** अच्छा है ( यह अनुरोध के साथ आया था ) मॉडल और उसकी सभी जटिलताओं (हां, शायद एपीआई और डीबी इनपुट / आउटपुट डेटा के लिए और भी अधिक सत्यापनकर्ता) को सत्यापित करने से पहले इसे सत्यापित करके।
निम्नलिखित का परीक्षण करें:
क) HTTP अनुरोध विधि (GET, POST, PUT, PATCH, DELETE ...)
बी) न्यूनतम HTML नियंत्रण (क्या आपके पास पर्याप्त है?)।
c) अधिकतम HTML नियंत्रण (क्या आपके पास बहुत अधिक है?)।
डी) सही HTML नियंत्रण (क्या आपके पास सही हैं?)।
ई) इनपुट एन्कोडिंग (आमतौर पर, एन्कोडिंग UTF-8 है?)।
च) अधिकतम इनपुट आकार (किसी भी इनपुट की सीमा से बाहर है?)।
याद रखें, आपको स्ट्रिंग्स और फाइलें मिल सकती हैं, इसलिए मॉडल को इंस्टेंट करने के लिए इंतजार करना बहुत महंगा हो सकता है क्योंकि अनुरोध आपके सर्वर को हिट करते हैं।
मैंने यहां जो कुछ भी वर्णित किया है, वह नियंत्रक के माध्यम से आने वाले अनुरोध के इरादे से हिट होता है। आशय के सत्यापन को स्वीकार करने से आपका आवेदन अधिक कमजोर हो जाता है। इरादा केवल अच्छा हो सकता है (आपके मूलभूत नियमों से खेलना) या बुरा (आपके मूलभूत नियमों के बाहर जाना)।
एक HTTP अनुरोध के लिए इरादा एक सब या कुछ नहीं प्रस्ताव है। सब कुछ गुजरता है, या अनुरोध अमान्य है । मॉडल को कुछ भी भेजने की आवश्यकता नहीं है।
HTTP के इस बुनियादी स्तर का अनुरोध आशय है कुछ भी नहीं नियमित उपयोगकर्ता इनपुट त्रुटियों और मान्यता के साथ क्या करना। मेरे अनुप्रयोगों में, एक HTTP अनुरोध मेरे द्वारा इसे सम्मानित करने के लिए उपरोक्त पाँच तरीकों से मान्य होना चाहिए। एक में रक्षा गहरी- बोलने की तरह, आप कभी नहीं उपयोगकर्ता इनपुट सत्यापन करने के लिए सर्वर साइड पर अगर मिल किसी भी इन पांच चीजों असफल।
हां, इसका मतलब यह है कि फ़ाइल इनपुट को आपके फ्रंट-एंड प्रयासों को सत्यापित करने और उपयोगकर्ता को अधिकतम फ़ाइल आकार स्वीकार करने के लिए राजी होना चाहिए। केवल HTML? कोई जावास्क्रिप्ट नहीं? ठीक है, लेकिन उपयोगकर्ता को उन फ़ाइलों को अपलोड करने के परिणामों के बारे में सूचित किया जाना चाहिए जो बहुत बड़ी हैं (मुख्यतः, कि वे सभी फ़ॉर्म डेटा खो देंगे और सिस्टम से बाहर हो जाएंगे)।
4) इसका मतलब यह है कि HTTP अनुरोध इनपुट डेटा एप्लिकेशन के व्यावसायिक तर्क का हिस्सा नहीं है? नहीं, इसका मतलब यह है कि कंप्यूटर परिमित उपकरण हैं और संसाधनों का बुद्धिमानी से उपयोग किया जाना चाहिए। यह जल्द ही नहीं बल्कि दुर्भावनापूर्ण गतिविधि को रोकने के लिए समझ में आता है। आप बाद में इसे रोकने के लिए प्रतीक्षा करने के लिए गणना संसाधनों में अधिक भुगतान करते हैं।
5) अगर HTTP रिक्वेस्ट इनपुट खराब है, तो पूरी रिक्वेस्ट खराब है । इस तरह मैं इसे देखता हूं। अच्छा HTTP अनुरोध इनपुट की परिभाषा मॉडल की व्यावसायिक आवश्यकताओं से ली गई है, लेकिन संसाधन सीमांकन के कुछ बिंदु होने चाहिए। आप उसे मारने से पहले एक बुरा अनुरोध कब तक जीने देंगे और कह रहे हैं, "ओह, अरे, कोई बात नहीं। बुरा अनुरोध।"
निर्णय केवल यह नहीं है कि उपयोगकर्ता ने एक उचित इनपुट गलती की है, लेकिन यह कि HTTP अनुरोध एक सीमा से बाहर है, इसे दुर्भावनापूर्ण घोषित किया जाना चाहिए और तुरंत रोक दिया जाना चाहिए।
6) तो, मेरे पैसे के लिए, HTTP अनुरोध (METHOD, URL / मार्ग, और डेटा) या तो सभी अच्छे हैं, या कुछ और नहीं आगे बढ़ सकते हैं। एक मजबूत मॉडल में पहले से ही अपने आप को चिंता करने के लिए सत्यापन कार्य हैं, लेकिन एक अच्छा संसाधन चरवाहा कहता है "मेरा तरीका है, या उच्च तरीका है। सही आओ, या बिल्कुल मत आओ।"
हालांकि यह आपका कार्यक्रम है। "इसे करने का एक से अधिक तरीका है।" कुछ तरीके दूसरों की तुलना में समय और धन में अधिक खर्च होते हैं। HTTP (बाद में मॉडल में) डेटा का अनुरोध करना एक आवेदन के जीवनकाल में अधिक खर्च करना चाहिए (खासकर अगर ऊपर या बाहर स्केलिंग)।
यदि आपके सत्यापनकर्ता मॉड्यूलर हैं, तो नियंत्रक में बुनियादी * HTTP अनुरोध इनपुट ** को मान्य करना एक समस्या नहीं होनी चाहिए। बस एक स्ट्रेटेजिड वैलिडेटर वर्ग का उपयोग करें, जहां सत्यापनकर्ता कभी-कभी विशेष सत्यापनकर्ताओं से बने होते हैं, (ई-मेल, फोन, फॉर्म टोकन, कैप्चा, ...)।
कुछ इसे पूरी तरह से गलत नेतृत्व के रूप में देखते हैं, लेकिन जब चार के गैंग ने डिज़ाइन पैटर्न: रि-यूजेबल ऑब्जेक्ट-ओरिएंटेड सॉफ़्टवेयर के तत्वों को लिखा था, तो HTTP अपनी प्रारंभिक अवस्था में था ।
================================================== ========================
अब, चूंकि यह सामान्य उपयोगकर्ता इनपुट सत्यापन (HTTP अनुरोध के बाद वैध माना गया है) से संबंधित है, यह उपयोगकर्ता को गड़बड़ करने के बारे में सोचने के लिए अद्यतन कर रहा है! इस प्रकार के उपयोगकर्ता इनपुट सत्यापन मॉडल में होने चाहिए।
आपके सामने के छोर पर जावास्क्रिप्ट की कोई गारंटी नहीं है। इसका मतलब है कि आपके पास त्रुटि स्थितियों के साथ अपने एप्लिकेशन के UI के अतुल्यकालिक अपडेट की गारंटी देने का कोई तरीका नहीं है। सच प्रगतिशील वृद्धि तुल्यकालिक उपयोग के मामले को भी कवर करेगी।
तुल्यकालिक उपयोग के मामले के लिए लेखांकन एक कला है जिसे अधिक से अधिक खो दिया जा रहा है क्योंकि कुछ लोग अपने सभी यूआई ट्रिक की स्थिति को ट्रैक करने के लिए समय और परेशानी से गुजरना नहीं चाहते हैं (नियंत्रण / नियंत्रण छिपाएं, अक्षम करें / नियंत्रण सक्षम करें) , त्रुटि संकेत, त्रुटि संदेश) बैक-एंड पर (आमतौर पर एरे में ट्रैकिंग राज्य द्वारा)।
अद्यतन : आरेख में, मैं कहता हूं कि View
संदर्भ देना चाहिए Model
। नहीं, आपको ढीले युग्मन को संरक्षित करने के लिए View
से डेटा पास करना चाहिए Model
।