2010-11-10 17 views
9

क्या जावास्क्रिप्ट के साथ क्लाइंट साइड पर व्यावसायिक तर्क लागू करना अच्छा विचार है?जावास्क्रिप्ट में व्यापार तर्क। पतला ग्राहक बनाम पतला ग्राहक

किस प्रकार का तर्क होना चाहिए? प्रमाणीकरण तर्क? जीयूआई से संबंधित?

आप एक ही तर्क किसी अन्य अनुप्रयोग (उजागर) जावास्क्रिप्ट में यह लागू करने में इस्तेमाल किया जा करने का मतलब होगा कि आप उस तर्क का पुन: उपयोग नहीं कर सकते हैं चाहते हैं, तो क्या करना होगा।

दूसरी ओर सर्वर साइड पर सभी तर्क होने पर सर्वर से अधिक अनुरोध का मतलब होगा।

आपको क्या लगता है?

उत्तर

6

आप पुन: प्रयोज्य जावास्क्रिप्ट मॉड्यूल बना सकते हैं, इसलिए कई अलग-अलग समृद्ध यूआईएस में तर्क को पुन: स्थापित करने के लिए कोई आंतरिक बाधा नहीं है। हालांकि, जैसा कि पहले से ही इंगित किया गया है, आप शायद जावास्क्रिप्ट और जो कुछ भी आप सर्वर (जावा, पीएचपी ...) पर उपयोग कर रहे हैं, के बीच नकल के साथ समाप्त हो जाते हैं - सत्यापन के मामले में एक प्रदर्शनकर्ता के बीच एक व्यापार बंद है डुप्लिकेशन के कारण उपयोगकर्ता अनुभव और जटिलता।

मैं परिदृश्यों जहां सिर्फ मान्यता की तुलना में अधिक नकल करने का निर्णय लेंगे कल्पना कर सकते हैं। कुल ऑर्डर मूल्य की गणना करने पर विचार करें: क्या हम वास्तव में इसके लिए सर्वर-साइड राउंड ट्रिप बनाना चाहते हैं? एक सूची छंटनी - हम जावास्क्रिप्ट में खुशी से ऐसा करते हैं, लेकिन हम सॉर्टिंग दिलचस्प, विशेष तुलनित्र Functoions प्राप्त कर सकते हैं? सीमा खींचना काफी मुश्किल हो सकता है, कंप्यूटिंग छूट और बिक्री कर?

अंत में यह निर्णय की सावधानीपूर्वक समझ के बाद एक निर्णय कॉल है। यदि आप तर्क को डुप्लिकेट करते हैं तो क्या आप एक परीक्षण रणनीति तैयार कर सकते हैं जो स्थिरता सुनिश्चित करता है? कम वॉल्यूम सिस्टम के साथ आप अधिक सर्वर इंटरैक्शन और कम डुप्लिकेशंस का पक्ष लेने के इच्छुक हो सकते हैं, लेकिन आप बड़े या अधिक मांग वाले उपयोगकर्ता-बेस के लिए अलग-अलग निर्णय ले सकते हैं।

3

यह एक प्रदर्शन के नजरिए से जावास्क्रिप्ट में मान्यता तर्क लागू करने के लिए, के रूप में उपयोगकर्ता सर्वर कॉल के लिए प्रतीक्षा करने की जरूरत नहीं है सुविधाजनक है, लेकिन आप अभी भी सभी सर्वर के लिए भेजा डेटा को मान्य करने के लिए है।

तुम नहीं हैं, तो आप दुर्भावनापूर्ण लोग अपनी पीठ प्रणाली को भ्रष्ट साथ खत्म हो जाएगा।

+0

जिसका मतलब है कि आप पर ** दोनों ** (ग्राहक एक्स सर्वर) पक्षों सत्यापन नियमों रखना चाहिए। – rsenna

8

किसी को कभी भी ग्राहक पर भरोसा नहीं करना चाहिए। इस प्रकार, जावास्क्रिप्ट के साथ क्लाइंट साइड पर आप जो भी सत्यापन करते हैं, वह केवल उपयोगकर्ता सुविधा और प्रयोज्यता में सुधार कर सकता है। यह सुनिश्चित करने के लिए कि आपको कोई भी डेटा इंजेक्ट नहीं करता है, यह सुनिश्चित करने के लिए आपको हमेशा अपने सर्वर पर आने वाले डेटा को सत्यापित करना होगा।

1

जावास्क्रिप्ट का उपयोग GUI में उपयोगकर्ता के अनुभव को समृद्ध करने के लिए किया जाना चाहिए, लेकिन आपकी साइट/वेबएप अभी भी इसके बिना काम करना चाहिए।

आपके सर्वर पर भेजे गए पैरामीटर्स को उपयोगकर्ता द्वारा छेड़छाड़ की जा सकती है। यदि आप इन मानों को सत्यापित या बनाने के लिए जावास्क्रिप्ट पर भरोसा करते हैं तो आप मूल रूप से अपने उपयोगकर्ताओं से शरारती चीजों को करने और करने के लिए कह रहे हैं। (और वे जाएगा) सत्यापन के लिए

जावास्क्रिप्ट ठीक है, यह अनुरोध की राशि अपने सर्वर पर जो सामान्य रूप से आवेदन का उपयोग उपयोगकर्ताओं के लिए कम हो जाएगा। लेकिन वह अभी भी अपने अनुभव को समृद्ध करने के तहत आता है। आपको अभी भी l33t h @ x0rs के 1% के लिए सर्वर-साइड को सत्यापित करने की आवश्यकता है जो समस्याएं बनाने का प्रयास करेंगे।

2

जो कुछ आप खोज रहे हैं उसे करने का प्रयास करने का एक तरीका है किसी प्रकार की वेब सेवा/वेब विधि एसेस का उपयोग करना और अपनी जावास्क्रिप्ट को विधियों पर AJAX कॉल करना, व्यवसाय तर्क पर सत्यापन करना और फिर एक भेजें सामने के अंत में वापस लौटें।

अब सामने अंत सर्वर के साथ बातूनी हो सकता है, लेकिन आप एक ही डोमेन की अन्य appliations आसानी के साथ कि व्यापार तर्क सत्यापन साझा करने के लिए ablity होगा। इस दृष्टिकोण का एक दूसरा लाभ यह है कि सभी व्यावसायिक तर्क और सत्यापन सर्वर पर है, और इस तरह से खुलासा नहीं किया गया है कि एक दुर्भावनापूर्ण व्यक्ति आसानी से कोड को देख या कुशलतापूर्वक उपयोग कर सकता है।

शुभकामनाएं, और उम्मीद है कि इससे कुछ मदद मिलती है।

1

मैं पिछले कुछ वर्षों में AJAX के बहुत काम किया है और उस पर मेरी ले यह है:

  • ग्राहक में व्यापार तर्क रखो और अधिक महत्वपूर्ण सर्वर साइड सत्यापन बढ़ाने के लिए। मैंने कुछ वित्तीय संस्थानों के लिए काम किया है और उनके पास हमेशा अच्छी सुरक्षा थी क्योंकि यह गहराई से किया गया था। क्लाइंट साइड सत्यापन, सर्वर साइड सत्यापन, ढांचा सुरक्षा, आदि ..., लेकिन वे हमेशा अनुप्रयोगों के प्रत्येक खंड में था। उन्होंने कभी नहीं माना कि कुछ भी सुरक्षित था और उन्होंने अपने इंट्रानेट ऐप्स बनाए जैसे कि वे इंटरनेट ऐप्स थे।
  • अन्य व्यावसायिक तर्क भी साथ में रखा जा सकता है, लेकिन हर समय एक पतले ग्राहक का विचार रखें। क्लाइंट में व्यवसाय तर्क डालने का दूसरा मुख्य कारण प्रदर्शन के लिए है।

उदाहरण के लिए, एक बार जब मेरे पास सबसे ऊपर ड्रॉपडाउन था जो पेज पर नीचे पांच अन्य नियंत्रणों को पीछे छोड़ देता था। प्रत्येक नियंत्रण के लिए सर्वर-साइड ट्रिप करने की बजाय मुझे एहसास हुआ कि शीर्षतम नियंत्रण ने एक कॉल किया और सभी कैस्केडिंग फैशन में बाद के नियंत्रणों पर डेटा डिस्प्ले को नियंत्रित किया। अन्य नियंत्रण एक ही डेटा के साथ स्वयं के बीच अंतर-संचालित होते हैं, जब तक कि सबसे ऊपर ड्रॉपडाउन नहीं बदला जाता। तो मैंने एक प्रबंधक बनाया जिसने डेटा को कैश किया/संभाला और प्रदर्शन उत्कृष्ट था! अधिकांश उपयोगकर्ता इंटरैक्शन उन प्रारंभिक ड्रॉपडाउन चयन पर आधारित थे, जिनका उपयोग 80-20 नियम था। अधिकांश समय उन्होंने सिर्फ एक चयन किया और वे जो चाहते थे उसे मिला।

  • क्लाइंट में प्रस्तुति तर्क का उपयोग करें। इसका मतलब है कि अगर आप एक ड्रॉपडाउन पर सॉर्ट कर रहे हैं जो आप किसी संपत्ति के माध्यम से एक जीयूआई विजेट में कर सकते हैं, तो हर तरह से इसे करें। जब मैंने एमवीपी (मॉडल व्यू प्रेजेंटर) प्रतिमान में जीडब्ल्यूटी के साथ काम किया है, तो आपको दृश्य में कोई व्यावसायिक तर्क नहीं डालना था, लेकिन आपको वहां प्रस्तुति तर्क देने की अनुमति थी। यह व्यवसाय तर्क पर्स नहीं है, लेकिन दूसरे के साथ संबंधों में संबंध है।
2

'युगल (संभवतः opiniated) 2013 से नोट:

वेब अनुप्रयोगों किसी अन्य अनुप्रयोग की तुलना में अलग नहीं विकसित किया जाना चाहिए।

कोई भी 2+ स्तरीय एप्लिकेशन लें (कोई भी सामान्य क्लाइंट-सर्वर मॉडल करेगा); क्या क्लाइंट या सर्वर पर चीजों को संसाधित करने के लिए यह समझ में आता है?

प्रदर्शन विचार

आप खाते प्रसंस्करण शक्ति, नेटवर्क विलंबता, नेटवर्क बैंडविड्थ, स्मृति और भंडारण की कमी में ले जाना है। आवेदन के आधार पर, आप अलग-अलग व्यापार-बंद चुन सकते हैं।

एक वसा ग्राहक आमतौर पर आपको क्लाइंट पर अधिक प्रक्रिया करने और सर्वर को ऑफ़लोड करने, अधिक कुशल संदेश पेलोड को क्रमबद्ध करने, और राउंडट्रिप्स को कम करने की अनुमति देता है, सब कुछ प्रोसेसिंग पावर, मेमोरी दक्षता, और संभवतः स्टोरेज स्पेस की लागत पर।

सुरक्षा कारणों से

सुरक्षा क्षणिक, इस्तेमाल किया मॉडल की परवाह किए बिना, प्रत्येक पार्टी (न केवल सर्वर) हमेशा सत्यापित करने के लिए और संभवतः डेटा यह कुछ हद तक अन्य से प्राप्त करता है स्वच्छ होगा है। कई वेब अनुप्रयोगों के लिए, इसका मतलब व्यापार तर्क के साथ इकाइयों को मान्य करना है, लेकिन हमेशा नहीं। यह इस बात पर निर्भर करता है कि डेटा क्या है, और किसके पास अधिकार है (और यह हमेशा सर्वर नहीं है)।

चूंकि वेब ब्राउज़र पहले से ही बहुत सारी जानकारी सत्यापित करता है, इसलिए क्लाइंट-साइड विचार कम हैं, लेकिन विशेष रूप से ऐसे क्लाइंट में जो एक्सएचआर बनाता है या वेबसाकेट्स का उपयोग करता है, जहां कम हाथ पकड़ना होता है)।

कभी-कभी, इसका मतलब है कि वास्तव में सर्वर और ग्राहक दोनों एक ही डेटा को मान्य करेंगे। यह ठीक है। यदि आप दोनों तरफ से सॉफ़्टवेयर विकसित करते हैं, तो आप क्लाइंट और सर्वर दोनों (जैसे पारंपरिक सॉफ़्टवेयर पैकेजों में इन सभी "सामान्य" मॉड्यूल) द्वारा उपयोग किए गए मॉड्यूल में अपना सत्यापन कोड निकाल सकते हैं। क्योंकि वेब वातावरण में क्लाइंट-साइड पर भाषा की आपकी पसंद सीमित है, इसलिए आपको समझौता करना पड़ सकता है। इसका अर्थ है कि आप सर्वर पर जावास्क्रिप्ट निष्पादित या जावास्क्रिप्ट Emscripten जैसी चीजों का उपयोग कर (यह भी amd.js देखें), या यहाँ तक कि मूल कोड अनिश्चित भविष्य सोडियम क्लोराइड/PNaCl जैसी चीजों का उपयोग करने में चलाने के लिए नीचे कई भाषाओं संकलन कर सकते हैं।

निष्कर्ष

मैं लगता है कि यह 'के रूप में तुरंत से इंस्टॉल किए गए', 'शून्य conf' और 'लगातार अद्यतन' ग्राहकों वेब अनुप्रयोग ग्राहकों के बारे में सोचने में मदद करता है। हम वेब के लिए इस शब्दावली का उपयोग नहीं करते हैं क्योंकि ये गुण शास्त्रीय वेब-आधारित सॉफ़्टवेयर के लिए हमेशा आंतरिक थे, लेकिन वे शास्त्रीय देशी सॉफ़्टवेयर के लिए नहीं थे। इसी प्रकार, हम देशी सॉफ़्टवेयर विकसित करते समय "सिंगल-पेज एप्लिकेशन" जैसे शब्दों का उपयोग नहीं करते हैं क्योंकि जब भी हमें क्लासिकल सॉफ़्टवेयर के साथ एक नई स्क्रीन पर स्विच करने की आवश्यकता होती है तो पूरे एप्लिकेशन को पुनरारंभ करने की आवश्यकता नहीं होती थी।

अभिसरण को गले लगाओ, और खुले दिमाग रखें; विभिन्न समुदायों से आने वाले लोगों को आने वाले वर्षों में एक-दूसरे से बहुत कुछ सीख जा रहे हैं।

0

व्यापार तर्क जितना संभव हो उपभोक्ता अज्ञेयवादी होना चाहिए। जब सही तरीके से डिज़ाइन किया गया है, तो आपका क्लाइंट और सर्वर कोड आपके व्यापार तर्क को एक पुन: प्रयोज्य फैशन में उपभोग करने में सक्षम होना चाहिए (यह मानते हुए कि क्लाइंट और सर्वर दोनों जावास्क्रिप्ट का उपभोग कर सकते हैं)।

किसी क्लाइंट (ब्राउज़र, इत्यादि) से आपके व्यावसायिक तर्क को उपभोग करने से सर्वर पर अनावश्यक हिट को रोका जा सकता है, यह मानते हुए कि एक दुर्भावनापूर्ण उपयोगकर्ता आपके यूआई को अपने एंडपॉइंट्स को हिट करने के लिए बाईपास नहीं कर रहा है। फिर उसी व्यवसाय तर्क को आपके सर्वर द्वारा रक्षा की अंतिम पंक्ति के रूप में उपभोग किया जा सकता है।

इसके अलावा, अगर ठीक से बनाया गया है, आप अपने व्यापार के तर्क और अधिक जटिल कार्यप्रवाह तर्क अच्छा प्रदर्शन करने की जरूरत है, एक सौदे के संदर्भ, आदि के भीतर चलाने के शामिल करने के लिए विस्तार कर सकते हैं; आमतौर पर चीजें जो क्लाइंट के माध्यम से सुविधाजनक बनाना मुश्किल होगा।

कई design patterns है कि आप पुन: प्रयोज्य व्यापार तर्क डिजाइन में मदद करने के पर भरोसा कर सकते हैं।

वहाँ भी इस तरह के peasy-js के रूप में उपलब्ध सूक्ष्म चौखटे, यह है कि आप तेजी से व्यापार तर्क आसानी से पुन: प्रयोज्य बढ़ाई, maintainable, और परीक्षण योग्य है कि बनाने के लिए मदद करते हैं।

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