मैं एक सामान्य मॉड्यूल लिखना चाहता हूं जो हास्केल प्रोग्राम को कैसंड्रा से बातचीत करने की अनुमति देता है। मॉड्यूल को अपने राज्य को बनाए रखने की आवश्यकता होगी। उदाहरण के लिए, इसमें एक कनेक्शन पूल होगा और एक नया रिकॉर्ड सहेजा जाने पर कॉलबैक की एक सूची होगी। मुझे कोड को कैसे ढूढ़ना चाहिए ताकि यह मॉड्यूल अपना राज्य बनाए रख सके? यहां कुछ ऐसे दृष्टिकोण दिए गए हैं जिन पर मैं विचार कर रहा हूं। क्या मैं सही रास्ते पर हूं? (मैं हास्केल के लिए नया हूँ और अभी भी बेहतरीन तरीके सीखने कार्यात्मक रूप में सोचने के लिए।)आप हास्केल में एक राज्यव्यापी मॉड्यूल कैसे बनाते हैं?
विकल्प 1:
मॉड्यूल एक (StateT रों आईओ) इकाई, जहां संपूर्ण के लिए वैश्विक स्थिति है में चलाता है कैसंड्रा मॉड्यूल का उपयोग कर कार्यक्रम। बेशक, चूंकि कैसंड्रा मॉड्यूल का उपयोग कई कार्यक्रमों द्वारा किया जा सकता है, इसलिए कैसंड्रा मॉड्यूल में क्या है इसका विवरण अदृश्य होना चाहिए। मॉड्यूल को एक प्रकार की कक्षा को निर्यात करना होगा जिसने इसे कैसंड्रास्टेट को निकालने की अनुमति दी है और एक नया कैसंड्रास्टेट वापस एस में धक्का दिया है। फिर, मॉड्यूल का उपयोग करने वाले किसी भी कार्यक्रम को अपने मुख्य राज्य को इस प्रकार के वर्ग का सदस्य बनाना होगा।
विकल्प 2:
मॉड्यूल एक (StateT CassandraState आईओ) इकाई में चलता है। हर बार जब कोई मॉड्यूल में कोई कार्रवाई करता है, तो उन्हें जहां भी इसे बंद कर दिया जाता है, वहां से कैसंड्रास्टेट निकालना होगा, रनस्टेट के साथ कार्रवाई का आह्वान करना होगा, और परिणामस्वरूप राज्य लेना होगा और इसे फिर से (कहीं भी) बंद कर देना होगा।
विकल्प 3:
बिल्कुल एक StateT इकाई में कैसेंड्रा मॉड्यूल के कार्यों न रखें। इसके बजाए, जब आवश्यक हो तो कॉलर स्पष्ट रूप से कैसंड्रास्टेट में पास हो जाए। विकल्प 2 के साथ समस्या यह है कि मॉड्यूल में सभी कार्य राज्य को संशोधित नहीं करेंगे। उदाहरण के लिए, कनेक्शन प्राप्त करने से राज्य को संशोधित किया जाएगा और परिणामस्वरूप राज्य को छेड़छाड़ करने के लिए कॉलर की आवश्यकता होगी। लेकिन, एक नया रिकॉर्ड सहेजने के लिए राज्य को पढ़ने की जरूरत है (कॉलबैक प्राप्त करने के लिए), लेकिन इसे राज्य को बदलने की जरूरत नहीं है। विकल्प 2 कॉलर को कोई संकेत नहीं देता है जो बनाते समय राज्य को बदलता है।
लेकिन, अगर मैं स्टेटटी मोनैड का उपयोग करने से दूर हो जाता हूं और केवल ऐसे कार्य होते हैं जो राज्यों में पैरामीटर के रूप में लेते हैं और सरल मूल्यों या नए राज्यों के सरल मूल्य या टुपल लौटते हैं, तो कॉलर के लिए वास्तव में स्पष्ट है जब राज्य की जरूरत है बचाया जा सकता है। (मेरे मॉड्यूल में कवर के तहत, मैं आने वाले राज्यों को ले जाऊंगा और उन्हें एक (स्टेटटी कैसंड्रास्टेट आईओ) मोनड में बनाउंगा, लेकिन इसका विवरण कॉलर से छिपा होगा। इसलिए, कॉलर को, इंटरफ़ेस बहुत स्पष्ट है बाकी
कुछ:, लेकिन कवर के तहत, यह सिर्फ विकल्प 2.)
विकल्प 4 है?
पुन: प्रयोज्य मॉड्यूल बनाने के दौरान यह समस्या अक्सर बार-बार आनी चाहिए। क्या इसे हल करने के लिए कोई मानक तरीका है?
(वैसे, अगर किसी को बचत का उपयोग करने से हास्केल से कैसेंड्रा के साथ बातचीत करने का एक बेहतर तरीका जानता है, मुझे पता है! हो सकता है कि मैं इस बारे में की जरूरत नहीं है तो कृपया। :-)
एफवाईआई - हास्केल सर्कल 'मॉड्यूल' में संकलन की इकाई है, यानी - एक एकल स्रोत फ़ाइल है। यद्यपि मेरे पास वर्णन करने के लिए वास्तव में एक बेहतर संज्ञा नहीं है, लेकिन 'मॉड्यूल' के बारे में बोलने से राज्य ने मुझे एक पल के लिए फेंक दिया। –
ओह। मुझे 'पैकेज' या 'लाइब्रेरी' कहा जाना चाहिए था। –