2012-10-26 12 views
13

मैं Google guice भर में आया और वास्तव में इसे समझ नहीं पाया और यह क्या किया, हालांकि इसके आसपास प्रचार का बहुत कुछ लगता है। मैं लाइब्रेरी के क्लोजुरियन परिप्रेक्ष्य को प्राप्त करने की उम्मीद कर रहा था और क्लोजर अनुप्रयोगों में इसकी आवश्यकता क्यों नहीं है और यदि भाषा में ऐसा कुछ भी बनाया गया था।Google guice के समतुल्य क्लोजर क्या है?

उत्तर

14

जावा के ओओ और टाइप सिस्टम के कारण, गतिशील रूप से विभिन्न अंतर्निहित कार्यान्वयन के बीच स्विचिंग (उदाहरण के लिए परीक्षण (मॉकिंग) उद्देश्यों के लिए) को प्रबंधित करना मुश्किल हो सकता है। Google Guice जैसे पुस्तकालयों का उद्देश्य जावा में इन dependency injections को अधिक शानदार तरीके से संभालना है।

क्लोजर और अन्य कार्यात्मक भाषाओं के कार्यों को पारित किया जा सकता है, जो विभिन्न कार्यान्वयनों का उपयोग करना आसान बनाता है।

  • उच्च आदेश कार्यों में पैरामीटर के रूप में समारोह के लिए अपनी पसंद का उपयोग करना:

    ऐसे कई तरीके हैं इस Clojure में किया जा सकता है।

  • (पुन) फ़ंक्शन की अपनी पसंद को एक var में बाध्यकारी।
  • बंद करने के अंदर फ़ंक्शन की अपनी पसंद को समाहित करना जिसे बाद में पारित किया जा सकता है और बुलाया जा सकता है।

Clojure Programming के अध्याय 12 में ओओ पैटर्न के कुछ अच्छे उदाहरण हैं जैसे निर्भरता इंजेक्शन और क्लोजर में इन्हें संभालने के वैकल्पिक तरीकों।

शॉन डेवेलिन में क्लोजर में निर्भरता इंजेक्शन पर Full Disclojure video भी है। हालांकि, उनका उदाहरण बेहतर चुना गया हो सकता है। अपने बंद होने में पूरी तरह से अलग कार्य कार्यान्वयन का उपयोग करने के बजाय, वह एक कारखाने का उपयोग करता है जो एक समारोह के विभिन्न 'संस्करण' देता है। गिस्ट वही रहता है हालांकि।

असल में, निर्भरता इंजेक्शन एक पैटर्न है जो ओओपी में एक आवश्यक बुराई है, और एफपी में आसानी से हल किया जा सकता है (या कोई समस्या भी नहीं है)।

6

किसी न किसी क्लोजर समकक्ष अभी भी विकास में हैं। वर्तमान में विकास में दो पुस्तकालय हैं (अक्टूबर 12 के रूप में): प्रिज्मेटिक के Graph (अभी तक खुले सोर्स नहीं किए गए) और Flow स्टुअर्ट सिएरा द्वारा।

ध्यान दें कि मैं गुइस को निर्भरता इंजेक्शन से अधिक होने पर विचार करता हूं। यह अनुप्रयोग विन्यास/मॉड्यूलरलाइजेशन के लिए एक ढांचा प्रदान करता है। उपर्युक्त पुस्तकालयों का लक्ष्य उस लक्ष्य को पूरा करना है।

+3

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

+1

सहमत हुए। मुझे लगता है कि यही कारण है कि रिच हिकी "सादगी" के बारे में बात करती है और क्यों इतने सारे देव अब स्प्रिंग फ्रेमवर्क कॉन्फ़िगरेशन monstrosities के बारे में शिकायत करते हैं। किसी भी मामले में, कुछ क्लोजर अनुप्रयोगों (स्पष्ट रूप से) इस तरह के ढांचे की आवश्यकता के लिए पर्याप्त बड़े हो जाते हैं। – noahlz

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