11

एमवीसी वेब विकास ढांचे में रूबी, रेल, डीजेगो और केकपीएचपी जैसे रूबी, HTTP अनुरोध नियंत्रकों को भेजे जाते हैं, जो आमतौर पर बैकएंड डेटाबेस स्टोर पर बने होते हैं। ये वस्तुएं उपयोगकर्ता, ब्लॉग पोस्ट इत्यादि जैसी चीजों का प्रतिनिधित्व करती हैं, और अक्सर अन्य ऑब्जेक्ट्स, सत्यापन, इत्यादि के लिए अनुमतियों को लाने, लाने और/या उत्परिवर्तित करने के लिए उनके तरीकों के भीतर तर्क शामिल हैंएक रेल-प्रकार वेबपैप में 'मॉडल' कैसे कार्यात्मक प्रोग्रामिंग भाषा में लागू किया जाएगा?

ये ढांचे सभी बहुत अधिक ऑब्जेक्ट उन्मुख हैं। मैं हाल ही में कार्यात्मक प्रोग्रामिंग पर पढ़ रहा हूं और ऐसा लगता है कि टेस्टेबिलिटी, कॉन्सिसनेस, मॉड्यूलरिटी इत्यादि जैसे जबरदस्त फायदे हैं। हालांकि, कार्यात्मक प्रोग्रामिंग के लिए मैंने देखा है कि अधिकांश उदाहरण क्विकॉर्ट या फाइबोनैची अनुक्रम जैसे छोटी कार्यक्षमता को लागू करते हैं, न कि जटिल वेबएप। मैंने कुछ 'कार्यात्मक' वेब ढांचे को देखा है, और वे सभी दृश्य और नियंत्रक को ठीक से लागू करने लगते हैं, लेकिन बड़े पैमाने पर पूरे 'मॉडल' और 'दृढ़ता' भाग को छोड़ देते हैं। (मैं कंपोज़र जैसे ढांचे के बारे में और बात कर रहा हूं जो पूरी तरह से कार्यात्मक माना जाता है, जो कि लिफ्ट के साथ आसानी से मॉडल के लिए स्काला के ओओ भाग का उपयोग करने लगता है - लेकिन अगर मैं यहां गलत हूं तो मुझे सही करें।)

मैंने एक अच्छा स्पष्टीकरण नहीं देखा है कि ओओ प्रोग्रामिंग प्रदान करने वाले रूपक को प्रदान करने के लिए कार्यात्मक प्रोग्रामिंग का उपयोग कैसे किया जा सकता है, यानी ऑब्जेक्ट्स के लिए टेबल मैप, और ऑब्जेक्ट्स में ऐसे विधियां हो सकती हैं जो शक्तिशाली, encapsulated तर्क जैसे अनुमति और सत्यापन प्रदान करती हैं। डेटा को बनाए रखने के लिए एसक्यूएल प्रश्नों का उपयोग करने की पूरी अवधारणा पूरे 'दुष्प्रभाव' अवधारणा का उल्लंघन करती है। क्या कोई व्यक्ति एक कार्यात्मक प्रोग्राम किए गए वेब ढांचे में 'मॉडल' परत लागू करने के बारे में स्पष्टीकरण प्रदान कर सकता है?

+4

कार्यात्मक भाषाएं साइड इफेक्ट्स को सीमित करने की कोशिश करती हैं। लेकिन सीमा हमेशा कार्यक्रम की सीमाओं के भीतर है। डेटास्टोर और आईओ आवेदन की सीमाओं के बाहर रहते हैं, इसलिए वे स्वीकार्य हैं। एक बार डेटा के अंदर डेटा आ गया है, फिर उस डेटा के परिवर्तन और रूटिंग को समझने योग्य और निर्धारक होना चाहिए। –

उत्तर

6

वस्तु उन्मुख MVC चौखटे पार्टी की योजना बनाई के लिए इच्छुक के बिना - मैं रेल पता नहीं है, लेकिन Django मेरी आंखों के लिए सॉफ्टवेयर का एक बहुत अच्छा टुकड़ा है - मुझे यकीन है कि वस्तु संबंधपरक मानचित्रण एक particularly good metaphor है नहीं कर रहा हूँ ।

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

अब यह किसी भी तरह का मतलब यह नहीं है कि यह एसक्यूएल प्रश्नों का उपयोग करने के लिए डीबी में डेटा में हेरफेर और varios RDBMSs 'विचित्रता से अधिक अमूर्त के लाभ पूर्वगामी आवश्यक है। चूंकि आप क्लोजर टैग का उपयोग कर रहे हैं, शायद आपको ClojureQL, एक सामान्य तरीके से विभिन्न डीबी के साथ संचार करने के लिए एक एम्बेडेड डीएसएल में दिलचस्पी हो सकती है। (ध्यान दें कि अभी इसे फिर से बनाया जा रहा है।) आप डेटा निकालने के लिए ऐसे कुछ डीएसएल का उपयोग कर सकते हैं; इस प्रकार शुद्ध कार्यों का उपयोग करके प्राप्त डेटा का उपयोग करें; फिर कुछ परिणाम प्रदर्शित करें और शायद कुछ डेटा डीबी (उसी डीएसएल का उपयोग करके) पर रखें।


अगर आपको लगता है वियतनाम युद्ध के लिए एक प्रौद्योगिकी की तुलना में थोड़ा चरम है, मुझे लगता है मैं इस बात से सहमत है, लेकिन यह है कि लेख मतलब यह नहीं है कि क्यों एक discribing का एक बहुत अच्छा काम नहीं करता है शायद ओआरएम quagmire में डुबकी नहीं करना चाहता।

ध्यान दें कि आप एक ओओ भाषा में उसी दृष्टिकोण का उपयोग कर सकते हैं और डीबी बैकएंड पर सार जैसे ही एफपी भाषाओं में किया जाता है (अगला पैराग्राफ देखें)। बेशक तो आपका एमवीसी ढांचा अब रेल की तरह दिखता नहीं है।

1

एक उदाहरण के लिए Conjure web application framework पर एक नज़र डालें, यह एक उदाहरण के लिए एक कार्यात्मक प्रोग्रामिंग भाषा में एक एमवीसी ढांचे को कैसे कार्यान्वित कर सकता है। Conjure मॉडल परत के लिए clj-record का उपयोग करता है, जिसमें संघों और सत्यापन के लिए समर्थन है।

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