मैं क्लोजर और RESTEasy का उपयोग कर एक जेएक्स-आरएस रीस्ट सर्वर डिजाइन कर रहा हूं।क्लोजर "डीएसएल" प्रोग्रामिंग
यह मेरी समझ है कि लिस्प-पारिवारिक भाषाओं में लिखे गए अनुप्रयोग "पारंपरिक" अनिवार्य भाषाओं में से अधिक हैं, जो "डोमेन-विशिष्ट भाषाओं" के रूप में बने हैं। एप्लिकेशन को "शीर्ष" स्तर पर, अधिक से अधिक "परिष्कृत" फ़ंक्शंस के रूप में नीचे-ऊपर से डिज़ाइन किया गया है, एप्लिकेशन बहुत उच्च स्तरीय फ़ंक्शंस में फ़ंक्शन कॉल की श्रृंखला बन जाता है।
मैं अपने आरईएसटी सर्वर के लिए ऐसा करने की कोशिश कर रहा हूं, जो संसाधन वर्गों से शुरू होता है जो सेवा यूआरएल अनुरोध (प्राप्त करें, पोस्ट करें, हटाएं, हटाएं)।
(ns com.example.server.resources.buildtime
(:import [javax.ws.rs CookieParam GET Produces Path]
[javax.ws.rs.core Context Cookie NewCookie Response UriInfo]
[org.jboss.resteasy.annotations.providers.jaxb Formatted]))
(definterface BuildTime
(getBuildTime [^javax.ws.rs.core.UriInfo info
^javax.ws.rs.core.Cookie security-cookie]))
(deftype
^{Formatted true}
BuildTimeResource []
BuildTime
(^{GET true
Path "/buildtime"
Produces ["application/json"]}
getBuildTime
[this info security-cookie]
(.. (Response/ok "20111009") build)))
इस संसाधन एक स्ट्रिंग (JSON पैकेज में संलग्न) के रूप में देता है सर्वर का निर्माण समय था जब यूआरएल "/ buildtime" मिल http विधि के साथ में कहा जाता है:
यहाँ मेरा पहला स्रोत है।
मैं इन संसाधन वर्गों और संलग्न तरीकों में से अधिकतर लिखूंगा (अधिकांश वर्गों में एक से अधिक विधि होंगे), प्रत्येक definterface
और deftype
के साथ। यह मैक्रोज़ के लिए एकदम सही उपयोग की तरह लगता है।
मैं डीएसएल के रूप में यह कैसे किया जा सकता है इसके लिए सुझाव मांग रहा हूं। डीएसएल के मामले में कोई सोचने के बारे में कैसे जाता है?
आरंभ करने के लिए: "कक्षाओं" के संदर्भ में सोचना बंद करें। यह पहले से ही एक डीएसएल है, जो पहले से ही संभावित विदेशी अर्थशास्त्र का थोड़ा सा है जिसे आप अंतिम डीएसएल में देखना नहीं चाहते हैं। औपचारिक रूप से समस्या को निर्दिष्ट करने के साथ शुरू करें। इकाइयों की सूची बनाएं, उन पर एक बीजगणित परिभाषित करें, और यह स्वाभाविक रूप से आपके डीएसएल में क्रिस्टलाइज होगा। केवल तभी आपको कार्यान्वयन के बारे में सोचना शुरू करना होगा। –
क्या आप compojure के बारे में जानते हैं? https://github.com/weavejester/compojure यह एक डीएसएल प्रदान करता है जो आपके मन में नहीं दिखता है। मुझे यह आलेख भी मिला है http://pragprog.com/magazines/2011-07/growing-a-dsl-with-clojure 'dsl-mode' में जाने के लिए सहायक है। लेकिन एक अच्छा डीएसएल के साथ आने से कोई आसान काम नहीं लगता है ... – Paul
@ पॉल: मैंने कंपोजर माना। हमारे पास पहले से ही एक बड़ा आरईएसटी सर्वर है जो रीस्टेसी/जावा में लिखा गया है। यदि मैं एक ढांचे का उपयोग करता हूं जिसके साथ हम परिचित हैं, तो संगठन में एक नया क्लोजर-आधारित एक आसान कम प्रतिरोध प्राप्त करेगा। इसके अलावा, जेएक्स-आरएस में कुछ बहुत अच्छी विशेषताएं हैं। – Ralph