2010-12-14 12 views
19

क्लोजर एप्रोच चिंता का पृथक्करण कैसे करता है? चूंकि कोड डेटा है, फ़ंक्शंस को पैरामीटर के रूप में पारित किया जा सकता है और रिटर्न के रूप में उपयोग किया जा सकता है ...क्लोजर एप्रोच चिंता का पृथक्करण कैसे करता है?

और, क्योंकि यह सिद्धांत है कि "100 डेटा संरचनाओं पर 100 से अधिक कार्यों, 1 डेटा संरचना पर काम करने वाले बेहतर 1000 फ़ंक्शन" (या ऐसा कुछ)।

मेरा मतलब है, सब कुछ एक नक्शा पैक करें, इसे एक कीवर्ड के रूप में कुंजी दें, और यही वह है? कार्य, स्केलर, संग्रह, सबकुछ ...

पहलुओं के पृथक्करण का विचार जावा में पहलुओं (पहलू उन्मुख प्रोग्रामिंग) और एनोटेशन के माध्यम से लागू किया गया है। यह अवधारणा का मेरा विचार है और कुछ हद तक सीमित हो सकता है, इसलिए इसे मंजूर न करें।

क्या सही तरीके से (मुहावरेदार रास्ता) Clojure में के बारे में जाने के लिए, साथी प्रोग्रामर _

+3

क्या आप जो पूछ रहे हैं उस पर आप थोड़ा और विशिष्ट हो सकते हैं। चिंताओं का पृथक्करण एक शब्द है जिसका उपयोग 100 अलग-अलग चीजों के लिए किया जाता है। – Sami

+1

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

उत्तर

60

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

प्रत्येक "चिंता" एक "पाइपलाइन" में एक कार्य होगी जो परिवर्तन को संभव बनाने में मदद करता है। इस तरह, प्रत्येक कार्य पूरी तरह से दूसरे चरणों से decoupled है।

ध्यान दें कि इसका मतलब है कि आपका डेटा, क्योंकि इन परिवर्तनों से गुजरता है, इसकी संरचना में समृद्ध होने की आवश्यकता है। अनिवार्य रूप से, हम कोड में नहीं, हमारे कार्यक्रम की सभी "खुफिया" डेटा में रखना चाहते हैं। एक जटिल कार्यात्मक कार्यक्रम में, विभिन्न स्तरों पर डेटा इतना जटिल हो सकता है कि प्रोग्रामिंग भाषा की तरह अपने अधिकार में दिखने की ज़रूरत है- यही वह जगह है जहां "डोमेन-विशिष्ट भाषाएं" का विचार खेलता है।

Clojure जो इस से भी कम समय में यह लग सकता है बोझिल बना देता है जटिल heterogenous डेटा संरचनाओं जोड़ तोड़ के लिए उत्कृष्ट समर्थन, है (यानी यह नहीं बोझिल बिल्कुल अगर सही किया है)

इसके अलावा, आलसी डेटा संरचनाओं के लिए Clojure के समर्थन इन की अनुमति देता है इंटरमीडिएट डेटा स्ट्रक्चर वास्तव में आकार में अनंत (अवधारणात्मक) अनंत होते हैं, जो अधिकांश परिदृश्यों में यह decoupling संभव बनाता है। इस स्थिति में असीमित डेटा संरचनाएं इतनी मूल्यवान क्यों है, इस बारे में जानकारी के लिए निम्न पेपर देखें: http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf

यह "पाइपलाइन" दृष्टिकोण चिंताओं को अलग करने के लिए आपकी 90% आवश्यकताओं को संभाल सकता है। शेष 10% के लिए आप क्लोजर मैक्रोज़ का उपयोग कर सकते हैं, जो उच्च स्तर पर पहलू उन्मुख प्रोग्रामिंग के लिए एक बहुत शक्तिशाली उपकरण के रूप में सोचा जा सकता है।

इस तरह मुझे विश्वास है कि आप क्लोजर में सबसे अच्छी तरह से चिंतित हो सकते हैं- ध्यान दें कि "ऑब्जेक्ट्स" या "पहलू" इस दृष्टिकोण में वास्तव में आवश्यक अवधारणाएं नहीं हैं।

+0

अच्छी तरह से कहा!अतिरिक्त नोट के रूप में, यदि आपके अधिकांश कार्य शुद्ध हैं, तो आप उन्हें आसानी से परीक्षण कर सकते हैं। –

+0

तो ऑब्जेक्ट्स (ओओ भाषाओं में) के बजाय, आपको संरचनाएं मिलती हैं (कार्यात्मक भाषाओं में)। यह Encapsulation के लिए संवाद "अवधारणा" है (उच्च cohension, कम युग्मन, काले बक्से, मॉड्यूलरिटी प्राप्त करने के लिए)? इसका कोई नाम है ? – Belun

+0

एक अच्छा पठन जो एक समान पाइपलाइन दृष्टिकोण के बारे में बात करता है (यद्यपि पायथन में): http://www.dabeaz.com/generators/Generators.pdf – szx