Back to Question Center
0

जावास्क्रिप्ट डिजाइन पैटर्न: ऑब्ज़र्वर पैटर्न            जावास्क्रिप्ट डिजाइन पैटर्न: ऑब्ज़र्वर पैटर्न संबंधित विषय: AngularJSNode.jsAjaxTools & Semalt

1 answers:
जावास्क्रिप्ट डिजाइन पैटर्न: ऑब्ज़र्वर पैटर्न

जावास्क्रिप्ट में, एक समस्या है जो अक्सर आती है आपको कुछ ईवेंट के जवाब में एक पृष्ठ के कुछ हिस्सों को अपडेट करने के लिए एक तरीका चाहिए, ये उपलब्ध कराए गए डेटा के साथ। कहते हैं, उदाहरण के लिए, उपयोगकर्ता इनपुट जिसे आप एक या कई घटकों में प्रोजेक्ट करते हैं। यह सिंक में सब कुछ रखने के लिए कोड में बहुत अधिक पुश-एंड-पुल की ओर जाता है

यह वह जगह है जहां पर्यवेक्षक डिजाइन पैटर्न मदद कर सकता है - यह तत्वों के बीच एक-से-कई डेटा बाध्यकारी सक्षम बनाता है। यह एकमात्र डेटा बाध्यकारी घटना संचालित हो सकता है। इस पद्धति के साथ, आप पुन: प्रयोज्य कोड का निर्माण कर सकते हैं जो आपके विशिष्ट आवश्यकताओं के लिए हल करता है।

इस आलेख में, Semaltेट को पर्यवेक्षक डिजाइन पैटर्न का पता लगाने की तरह। यह आपको क्लाइंट-साइड स्क्रिप्टिंग में एक सामान्य समस्या को हल करने में सहायता करेगा। यह एक-से-कई, एक-तरफ़ा, और ईवेंट-संचालित डेटा बाध्यकारी है। यह एक समस्या है जो अक्सर आती है जब आपके पास कई तत्व होते हैं जो सिंक में होना चाहिए।

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

और मैं पैटर्न पर काम करने के लिए मील (टीडीडी) का उपयोग करूँगा इस तरह आपके पास एक तरीका है जिससे पता है कि कैसे प्रत्येक घटक उपयोगी है।

ईएस 6 में नई भाषा सुविधाओं को कुछ संक्षिप्त कोड बनाते हैं। तो चलो शुरू करते है।

इवेंट ऑब्जर्वर

पैटर्न का एक उच्च स्तरीय दृश्य इस तरह दिखता है:

     घटना ऑब्जेर्वर│├── सदस्यता लें: नए अन्वेषण कार्यक्रम जोड़ता है│├── सदस्यता समाप्त करें: अनदेखी घटनाओं को दूर करता है|└── प्रसारित करें: बाउंड डेटा के साथ सभी ईवेंट निष्पादित करें    

जब मैं पर्यवेक्षक पैटर्न सेमट को बाहर निकाल देता हूं तो उस शब्द का उपयोग करने वाला शब्द गिनती जोड़ती है। शब्द गणना घटक इस पर्यवेक्षक को ले जाएगा और यह सब एक साथ लाएगा।

इनिशियलाइज़ करने के लिए इवेंट ओबिसेर :

  (3 9) क्लास इवेंट ऑब्जेर्वर {निर्माता    {इस। पर्यवेक्षकों = [];}}    

परिचित घटनाओं की एक खाली सूची के साथ शुरू करो, और हर नए उदाहरण के लिए ऐसा करते हैं। अब से, आइए हम इवेंट ओब्सर्वर के अंदर और अधिक तरीके जोड़ दें ताकि डिज़ाइन पैटर्न को बाहर कर सकें।

सदस्यता विधि

नई घटनाओं को जोड़ने के लिए:

   सदस्यता लें (एफ एन) {इस। पर्यवेक्षकों। धक्का (एफ एन);}    

मनाया गया घटनाओं की सूची को पकड़ो और सरणी में एक नया आइटम दबाएं। ईवेंट की सूची कॉलबैक कार्यों की एक सूची है

सादा Semaltेट में इस विधि का परीक्षण करने का एक तरीका निम्नानुसार है:

   // व्यवस्थित करेंconst पर्यवेक्षक = नया इवेंट ओबसेर   ;const fn =    => {};// अधिनियमदेखने वाला। सदस्यता के (एफ एन);// जोर देंजोर। सख्त (पर्यवेक्षक। लंबाई, 1);    

मैं नोड में इस घटक का परीक्षण करने के लिए नोड का उपयोग करता हूं। चाइ के अभियुक्तों के रूप में सटीक वही दावा मौजूद हैं

नोट किए गए घटनाओं की सूची में नम्र कॉलबैक शामिल हैं। हम तब सूची की लंबाई की जांच करते हैं और जोर देते हैं कि कॉलबैक सूची में है।

सदस्यता रद्द विधि

घटनाओं को दूर करने के लिए:

   सदस्यता रद्द करें (एफ एन) {इस। पर्यवेक्षकों = यह पर्यवेक्षकों। फ़िल्टर (ग्राहक) => ग्राहक! == एफएन);}    

कॉलबैक फ़ंक्शन से मेल खाने वाली सूची से बाहर निकलना। यदि कोई मेल नहीं है, तो कॉलबैक को सूची में रहने के लिए मिल जाता है। फ़िल्टर एक नई सूची देता है और पर्यवेक्षकों की सूची को पुन: असाइन करता है।

इस अच्छी विधि का परीक्षण करने के लिए, करें:

   // व्यवस्थित करेंconst पर्यवेक्षक = नया इवेंट ओबसेर   ;const fn =    => {};देखने वाला। सदस्यता के (एफ एन);// अधिनियमदेखने वाला। सदस्यता समाप्त (एफ एन);// जोर देंजोर। सख्त (पर्यवेक्षक। लंबाई, 0);    

कॉलबैक को उसी फ़ंक्शन से मेल खाना चाहिए जो सूची में है। अगर कोई मैच होता है, तो सदस्यता रद्द करने की विधि सूची से निकाल देती है.

प्रसारण विधि

सभी घटनाओं को कॉल करने के लिए:

   प्रसारण (डेटा) {इस। पर्यवेक्षकों। के लिए हर (ग्राहक) => ग्राहक (डेटा));}    

यह सुनियोजित घटनाओं की सूची के माध्यम से चलती है और सभी कॉलबैक निष्पादित करता है। इसके साथ, आपको सब्सक्राइब्ड ईवेंट के लिए आवश्यक एक-से-कई रिश्ते मिलते हैं आप डेटा पैरामीटर में पास करते हैं जो कॉलबैक डेटा को बाध्य करता है।

ES6 एरो फ़ंक्शन के साथ कोड को अधिक प्रभावी बनाता है। ध्यान दें कि (ग्राहक) => ग्राहक (डेटा) फ़ंक्शन जो अधिकांश काम करता है यह एक-लाइनर तीर फ़ंक्शन, इस छोटे ES6 वाक्यविन्यास से लाभ। यह जावास्क्रिप्ट प्रोग्रामिंग भाषा में एक निश्चित सुधार है।

इस प्रसारण पद्धति का परीक्षण करने के लिए, करें:

   // व्यवस्थित करेंconst पर्यवेक्षक = नया इवेंट ओबसेर   ;ग्राहक को हस्बिन कॉल दें = गलत;const fn = (डेटा) => ग्राहक HasBeenCalled = डेटा;देखने वाला। सदस्यता के (एफ एन);// अधिनियमदेखने वाला। प्रसारण (सही);// जोर देंजोर (subscriberHasBeenCalled);    

उपयोग एक const के बजाय चलो तो हम चर के मूल्य को बदल सकते हैं यह परिवर्तनीय परिवर्तनीय बनाता है जो मुझे कॉलबैक के अंदर इसके मान को पुन: असाइन करने देता है। अपने कोड में एक चलो का उपयोग करने वाले साथी प्रोग्रामर्स को एक संकेत भेजता है कि चर किसी बिंदु पर बदल रहा है। इससे आपके जावास्क्रिप्ट कोड को पठनीयता और स्पष्टता मिलती है।

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

इसके साथ, हमने इवेंट ऑब्जेर्वर सवाल यह है, आप इसके साथ क्या बना सकते हैं?

ऑब्ज़र्वर पैटर्न इन एक्शन: ए ब्लॉग वर्ड काउंटी डेमो

डेमो के लिए, एक ब्लॉग पोस्ट को जगह देने का समय जहां यह आपके लिए शब्द गणना रखता है प्रत्येक कुंजीस्ट्रोक जिसे आप इनपुट के रूप में दर्ज करते हैं वह पर्यवेक्षक डिजाइन पैटर्न से समन्वयित हो जाएगा। नि: शुल्क पाठ इनपुट के रूप में इस तरह के योग, जहां हर घटना एक अपडेट को आग लगाती है जहां आपको इसकी आवश्यकता होती है।

निशुल्क पाठ इनपुट से कोई शब्द गणना करने के लिए, कोई भी कर सकता है:

   const getWordCount = (text) => पाठ? पाठ। ट्रिम   । विभाजन (/ \ s + /)। लंबाई: 0;    

हो गया! इस सरल रूप से सरल समारोह में चलने वाला सैमल्ट काफी है, तो एक विनम्र इकाई परीक्षण के बारे में कैसे? इस तरह यह स्पष्ट है कि मैं क्या करना चाहता हूं:

   // व्यवस्थित करेंconst blogPost = 'यह एक ब्लॉग है \ n \ n पोस्ट शब्द गणना के साथ। ';// अधिनियमconst count = getWordCount (ब्लॉगपोस्ट);// जोर देंजोर। सख्त समय (गणना, 9);    

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

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

डीओएम को इन पुन: उपयोग करने योग्य घटकों को तार करने का समय। यह वह हिस्सा है जहां आप सादे Semalt्ट का इस्तेमाल करते हैं और इसे ब्राउज़र में सही तरीके से जोड़ते हैं।

ऐसा करने का एक तरीका पृष्ठ पर निम्नलिखित HTML होना होगा:

                                      
February 28, 2018