सबसे बड़ा "अनुवाद संबंधी मुद्दा" शायद जावा / ओओपी पद्धति से क्लोजर / कार्यात्मक प्रोग्रामिंग प्रतिमान तक जाएगा।
विशेष रूप से, वस्तुओं के भीतर उत्परिवर्तनीय अवस्था होने के बजाय, "क्लोजर तरीका" है कि स्पष्ट रूप से उत्परिवर्तित अवस्था को अलग किया जाए और शुद्ध (साइड-इफ़ेक्ट फ्री) कार्यों को विकसित किया जाए। आप शायद यह सब पहले से ही जानते हैं :-)
वैसे भी, यह दर्शन एक "नीचे ऊपर" विकास शैली की ओर जाता है, जहां आप अपनी समस्या को हल करने के लिए उपकरणों के सही सेट के निर्माण पर प्रारंभिक प्रयासों पर ध्यान केंद्रित करते हैं, फिर अंत में उन्हें एक साथ प्लग करते हैं। यह कुछ इस तरह लग सकता है
प्रमुख डेटा संरचनाओं की पहचान करें और उन्हें अपरिवर्तनीय क्लॉज्योर मानचित्र या रिकॉर्ड परिभाषाओं में बदल दें। बहुत सारे अपरिवर्तनीय नक्शों से घबराने की जरूरत नहीं है - वे क्लजुरे के लगातार डेटा संरचनाओं के लिए बहुत कुशल हैं। वर्थ देख इस वीडियो को अधिक जानने के लिए।
शुद्ध, व्यावसायिक तर्क उन्मुख कार्यों के छोटे पुस्तकालयों को विकसित करें जो इन अपरिवर्तनीय संरचनाओं पर काम करते हैं (उदाहरण के लिए "शॉपिंग कार्ट में एक आइटम जोड़ें")। आपको इन सभी को एक बार में करने की आवश्यकता नहीं है क्योंकि बाद में इसे जोड़ना आसान है, लेकिन यह परीक्षण को सुविधाजनक बनाने और यह साबित करने में कुछ जल्दी करने में मदद करता है कि आपकी डेटा संरचनाएं काम कर रही हैं ..... या तो इस तरह से बिंदु आप वास्तव में REPL पर अंतःक्रियात्मक रूप से उपयोगी सामान लिखना शुरू कर सकते हैं
अलग से डेटा एक्सेस रूटीन विकसित करें जो इन संरचनाओं को डेटाबेस या नेटवर्क या विरासत जावा कोड से / आवश्यकतानुसार बनाये रख सकते हैं। इसे बहुत अलग रखने का कारण यह है कि आप अपने "व्यावसायिक तर्क" कार्यों के साथ दृढ़ता तर्क नहीं रखना चाहते हैं। आप देखना चाह सकते हैं इसके लिए क्लोजुरेसेल , हालांकि यह किसी भी जावा दृढ़ता कोड को लपेटना बहुत आसान है जो आपको पसंद है।
इकाई परीक्षण लिखें (जैसे clojure.test के साथ ) जो उपरोक्त सभी को कवर करते हैं। यह विशेष रूप से एक गतिशील भाषा में क्लोजर की तरह महत्वपूर्ण है क्योंकि a) आपके पास स्थैतिक प्रकार की जाँच और b से सुरक्षा जाल जितना नहीं है) यह सुनिश्चित करने में मदद करता है कि आपके निचले स्तर के निर्माण अच्छी तरह से निर्माण करने से पहले आपके बहुत अच्छे काम कर रहे हैं उनमें से सबसे ऊपर
तय करें कि आप प्रत्येक भाग के परिवर्तनशील अनुप्रयोग-स्तर की स्थिति का प्रबंधन करने के लिए क्लॉजुर के संदर्भ प्रकारों (vars, Refs, Agent और atoms) का उपयोग कैसे करना चाहते हैं। वे सभी समान तरीके से काम करते हैं लेकिन आपके पास जो करने की कोशिश कर रहे हैं उसके आधार पर अलग-अलग लेनदेन / संगामिति शब्दार्थ हैं। Refs शायद आपकी डिफ़ॉल्ट पसंद होने जा रहे हैं - वे आपको किसी भी कोड को (dosync ...) ब्लॉक में लपेटकर "सामान्य" एसटीएम व्यवहार व्यवहार को लागू करने की अनुमति देते हैं।
सही समग्र वेब फ्रेमवर्क का चयन करें - क्लोजर काफी पहले से ही है, लेकिन मैं रिंग की जोरदार सिफारिश करूंगा - इस उत्कृष्ट वीडियो को देखें " वन रिंग टू बिंद देम " प्लस या तो फ्लीट या एनलाइव या हिचकी दर्शन के आधार पर । फिर अपनी प्रस्तुति परत लिखने के लिए इसका उपयोग करें ("इस खरीदारी की टोकरी को एक उपयुक्त HTML टुकड़े में अनुवाद करें" जैसे कार्यों के साथ)
अंत में, उपरोक्त टूल का उपयोग करके अपना एप्लिकेशन लिखें। यदि आपने उपरोक्त चरणों को ठीक से किया है, तो यह वास्तव में आसान बिट होगा क्योंकि आप बहुत कम बायलरप्लेट के साथ विभिन्न घटकों की उपयुक्त संरचना द्वारा पूरे एप्लिकेशन को बनाने में सक्षम होंगे।
यह मोटे तौर पर अनुक्रम है कि मैं समस्या पर हमला करूंगा क्योंकि यह मोटे तौर पर आपके कोड में निर्भरता के आदेश का प्रतिनिधित्व करता है, और इसलिए "नीचे" विकास के प्रयास के लिए उपयुक्त है। हालांकि अच्छी फुर्तीली / पुनरावृत्ति शैली में आप संभवतः खुद को एक प्रदर्शनकारी अंत उत्पाद के लिए आगे बढ़ा पाएंगे और फिर आवश्यकतानुसार कार्यक्षमता या रिफ्लेक्टर को बढ़ाने के लिए पहले के चरणों में वापस कूदेंगे।
ps यदि आप उपर्युक्त दृष्टिकोण का पालन करते हैं, तो मैं यह सुनकर रोमांचित हो जाऊंगा कि जावा की 50,000 लाइनों की कार्यक्षमता से मेल खाने के लिए क्लोजर की कितनी लाइनें लगती हैं
अपडेट : चूंकि यह पोस्ट मूल रूप से कुछ अतिरिक्त टूल के रूप में लिखी गई थी / पुस्तकालय सामने आए हैं जो "अवश्य देखें" श्रेणी में हैं:
- नॉयर - वेब फ्रेमवर्क जो रिंग के ऊपर बनता है।
- कोरमा - SQL डेटाबेस तक पहुँचने के लिए एक बहुत अच्छा डीएसएल।