मैं क्लोज़ुरस्क्रिप्ट के साथ फ़िडलिंग शुरू करना चाहता हूं, लेकिन मैं कुछ बिंदुओं के बारे में हैरान हूं। मेरी समस्या यह है कि उपयोगकर्ता इंटरैक्शन से आने वाले राज्य परिवर्तनों से निपटने का एक अच्छा तरीका क्या है, जब आप कार्यात्मक रूप से काम करने की कोशिश कर रहे हैं।
एक दो उदाहरण देता हूं। मेरे पास ऐसे एप्लिकेशन हैं जो ब्राउज़र में चलते हैं, लेकिन मुझे लगता है कि यह मुद्दा अधिक सामान्य है। बेशक कुछ बदल रहा होगा - डोम कम से कम। लेकिन मैं यह पता लगाना चाहूंगा कि अपरिवर्तनीय डेटा संरचनाओं के साथ काम करने के लिए बाकी कोड को कैसे व्यवस्थित किया जाए।
1) कहो कि मैं कुछ घटनाओं को कुछ DOM ऑब्जेक्ट में संलग्न करना चाहता हूं। यह ज्यादातर कार्यात्मक तरीके से करना मुश्किल नहीं है: जब आप नोड बनाते हैं, तो आप इसे विभिन्न ईवेंट हैंडलर के साथ हैश मैप देते हैं। लेकिन उस मामले पर विचार करें जहां आप इवेंट डेलिगेशन का उपयोग कर रहे हैं। फिर जब आप एक नया नोड बनाते हैं, तो आप एक इवेंट हैंडलर को कुछ मूल नोड से जोड़ सकते हैं जो शायद पहले से मौजूद हैं। तो आपको पहले से मौजूद नोड से जुड़े हैश को बदलना होगा।
2) कहो कि मैं एक इनपुट क्षेत्र के लिए एक स्वत: पूर्ण मॉड्यूल तैयार कर रहा हूं। जब भी उपयोगकर्ता एक कुंजी दबाता है, मैं सुझाव प्राप्त करने के लिए एक सर्वर पर कॉल कर सकता हूं। यह आसान है। लेकिन अब मान लीजिए कि मैं इसे थोड़ा अनुकूलित करना चाहता हूं। अगर मुझे पता है कि सभी परिणामों का मिलान foo
होता है, तो सभी परिणामों के मिलान के लिए फिर से पूछने का कोई मतलब नहीं है foobar
; मैं सिर्फ पूर्व फ़िल्टर कर सकता हूं। इसलिए मुझे कुछ प्रकार के कैश बनाने की आवश्यकता है। यह कैश हर बार अपडेट किया जाएगा जब उपयोगकर्ता एक नया शब्द सम्मिलित करेगा जो पहले दर्ज किए गए शब्दों का सुपरसेट नहीं है। फिर से: मैं कैश को कैसे मॉडल करूं? परिणामों के लिए सबसे उचित तरीका हैश मैप मैपिंग शब्द लगता है, लेकिन यह परस्पर होना चाहिए।
क्या आप कुछ पैटर्न सुझा सकते हैं जो कार्यात्मक डिज़ाइन में उपयोगकर्ता के इंटरैक्शन के कारण परिवर्तनों को शामिल करना आसान बना देगा?