कार्यात्मक भाषाओं में यूआई पैटर्न


11

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

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

1) कहो कि मैं कुछ घटनाओं को कुछ DOM ऑब्जेक्ट में संलग्न करना चाहता हूं। यह ज्यादातर कार्यात्मक तरीके से करना मुश्किल नहीं है: जब आप नोड बनाते हैं, तो आप इसे विभिन्न ईवेंट हैंडलर के साथ हैश मैप देते हैं। लेकिन उस मामले पर विचार करें जहां आप इवेंट डेलिगेशन का उपयोग कर रहे हैं। फिर जब आप एक नया नोड बनाते हैं, तो आप एक इवेंट हैंडलर को कुछ मूल नोड से जोड़ सकते हैं जो शायद पहले से मौजूद हैं। तो आपको पहले से मौजूद नोड से जुड़े हैश को बदलना होगा।

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

क्या आप कुछ पैटर्न सुझा सकते हैं जो कार्यात्मक डिज़ाइन में उपयोगकर्ता के इंटरैक्शन के कारण परिवर्तनों को शामिल करना आसान बना देगा?


4
लुकअप "कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग"।
dan_waterworth

यह बिल्कुल समान बात नहीं है, लेकिन (साइड-इफ़ेक्ट फ्री) XSLT टेम्प्लेट के साथ जो डोम इवेंट से मेल खाते हैं, जो एक उपयोगकर्ता द्वारा शुरू की गई है, हम एक ऐसी ही समस्या का सामना सैक्सन-सीई में करते हैं। जिस तरह से मैं इसे देखना पसंद करता हूं वह यह है कि उपयोगकर्ता राज्य में परिवर्तन को ट्रिगर कर रहा है, न कि एक्सएसएलटी ताकि ओके की तरह। कुंजी यह सुनिश्चित करने के लिए है कि उपयोगकर्ता बातचीत और उसके बाद राज्य में हुए परिवर्तनों को प्रबंधित करना बाकी हिस्सों से बहुत अलग है।
pgfearo

@pgfearo क्या आपके पास कोई सलाह है कि कोड को व्यवस्थित कैसे करें ताकि उपयोगकर्ता इंटरैक्शन को बाकी हिस्सों से अलग रखा जाए?
एंड्रिया

जब आप कार्यात्मक रूप से काम कर रहे होते हैं, तो राज्य परिवर्तनों से निपटने का एक अच्छा तरीका नहीं है, क्योंकि कार्यात्मक प्रोग्रामिंग स्टेटलेस है।
ओल्ड प्रो

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

जवाबों:


3

जैसा कि टिप्पणियों में बताया गया है कि आपको "कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग" दिखना चाहिए और आपको http://prog21.dadgum.com/archives.html पर कुछ पोस्ट भी पढ़ने चाहिए । अधिक विशेष रूप से आपको शायद " अपनी तकनीक के साथ प्यार में मत पड़ो ", " कोड लिखें जैसे आप अभी-अभी सीखे कैसे प्रोग्राम करें ", " कार्यात्मक प्रोग्रामिंग काम नहीं करता है (और इसके बारे में क्या करना है) ", और शायद पढ़ना चाहिए कुछ अन्य।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.