2011-02-09 12 views
7

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

बहुत हैकी किए बिना ऐसा करने के लिए कुछ तकनीकें क्या हैं?

उदाहरण के लिए, मुझे एक उप-पैकेज का उपयोग करने और <super-source/> टैग का उपयोग करने के बारे में पता है, लेकिन इसके लिए पैकेज नाम अलग होने की आवश्यकता है, जो ग्रहण करने के लिए ग्रहण का कारण बनता है। समुदाय में सामान्य समाधान तब ग्रहण को स्रोत स्रोत के रूप में उपयोग करने के लिए कहता है, लेकिन उसके बाद शिकायत शिकायत करती है कि एक ही नाम के साथ दो वर्ग हैं।

आदर्श रूप से, सब कुछ एक ही स्रोत पेड़ में रखने का एक तरीका होगा, और वास्तव में अलग-अलग कक्षाएं होती हैं जो वैकल्पिक कार्यान्वयन लागू करती हैं। यह एक और ओओ दृष्टिकोण की तरह महसूस करेगा।

मैं _gwt जैसी कक्षा में एक प्रत्यय जोड़ना चाहता हूं जो इसे स्वचालित रूप से पूरा करता है, और मुझे पता है कि मैं इस तरह के परिवर्तन करने के लिए एक स्क्रिप्ट लिख सकता हूं, लेकिन यह निश्चित रूप से एक कड़वाहट है।

मैं सामान्य रूप से अपनी परियोजनाओं के लिए Google की जीआईएन/GUICE पुस्तकालयों का उपयोग करने पर विचार कर रहा हूं, और मुझे लगता है कि वहां कोई समाधान हो सकता है, लेकिन मुझे यकीन नहीं है क्योंकि मैंने इसकी पूरी तरह से जांच नहीं की है।

जीडब्ल्यूटी परियोजनाओं पर अतीत में आपके द्वारा किए गए कुछ समाधान क्या हैं?

उत्तर

7

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

ग्रहण/जैवैक डबल-मैपिंग और पैकेज नाम के मुद्दों के आसपास काम करने के लिए, जीडब्ल्यूटी स्रोत उपयोगकर्ता कोड के लिए दो top-level roots का उपयोग करता है: उपयोगकर्ता/src और user/super। उदाहरण के लिए, ऑटोबीन्स पैकेज में जेएसओएन उद्धरण और मूल्यांकन, one for the JVM और one for the browser का विभाजन-कार्यान्वयन है।

सुपर-स्रोत को लागू करने के लिए वास्तव में कोई गैर-क्लूजी तरीका नहीं है, क्योंकि यह भाषा में निर्दिष्ट करने के बाहर एक विशेषता तरीका है। ऐसा कुछ भी नहीं है जो आपको कुछ बाहरी टूल के उपयोग के बिना "इस पर्यावरण में इस कार्यान्वयन का उपयोग" करने देता है। Google के समाधान का जिक्र करने के लिए

+1

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

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