2009-05-04 15 views
7

में मैं एक जावा \ स्प्रिंग \ हाइबरनेट अनुप्रयोग है - डोमेन वर्ग है जो मूल रूप से POJOsका उपयोग जावा वर्गों Grails

वहाँ कार्यक्षमता का एक टुकड़ा मुझे लगता है कि Grails में अच्छी तरह से लिखा जा सकता है हाइबरनेट कर रहे हैं के साथ पूरा।

मुझे लगता है कि मैं मुख्य जावा एप्लिकेशन

ऐसा करने के लिए सबसे अच्छा तरीका क्या है में बनाया है डोमेन कक्षाओं का पुन: उपयोग करना चाहते हैं?

क्या मुझे जावा कक्षाओं को विस्तारित करने वाले नए डोमेन वर्ग लिखना चाहिए? यह tacky लगता है या मैं जावा डोमेन कक्षाओं से नियंत्रक 'उत्पन्न' कर सकते हैं?

क्या Grails \ ग्रूवी में जावा डोमेन वस्तुओं पुन: उपयोग के आसपास सर्वोत्तम प्रथाओं मैं ग्रूवी

\ आप एक ट्यूटोरियल के बारे में जो इस तरह के एक integration- बात करती है के बारे में पता अगर वहाँ grails में कुछ हिस्सों को लिखने दूसरों होना चाहिए यकीन कर रहे हैं वह तो जबर्दस्त होगा !!!

पीएस: मैं grails-groovy में काफी नौसिखिया हूँ इसलिए स्पष्ट हो सकता है। धन्यवाद !!!

उत्तर

4

क्या आप वास्तव में ग्रोवी के बजाए Grails का उपयोग करने की आवश्यकता है?

Grails वास्तव में ऐसा कुछ नहीं है जिसका उपयोग आप किसी मौजूदा वेब ऐप में जोड़ने के लिए कर सकते हैं। संपूर्ण "कॉन्फ़िगरेशन पर सम्मेलन" दृष्टिकोण का अर्थ है कि आपको Grails के नियमों से बहुत कुछ खेलना है, अन्यथा इसका उपयोग करने में कोई बात नहीं है। और उन नियमों में से एक यह है कि डोमेन ऑब्जेक्ट्स ग्रोवी कक्षाएं हैं जो Grails रनटाइम द्वारा भारी रूप से "बढ़ाया" है।

उन्हें मौजूदा जावा कक्षाओं का विस्तार करना संभव हो सकता है, लेकिन मैं इस पर शर्त नहीं लगाऊंगा - और आपके मौजूदा ऐप के सभी वसंत और हाइबरनेट हिस्सों को त्यागना होगा, या कम से कम आपको उन्हें Grails में काम करने के लिए बहुत मेहनत खर्च करें। आप इससे लाभ लेने के बजाय ढांचे से लड़ेंगे।

  • Grails में शुरू से अपना एप्लिकेशन पुनर्लेखन संभव के रूप में मौजूदा कोड के रूप में ज्यादा पुन: उपयोग करते हुए:

    IMO आप दो विकल्प हैं।

  • अपने ऐप को रखें और ग्रिलो का उपयोग किए बिना ग्रोवी में नई सामग्री जोड़ें।

उत्तरार्द्ध शायद आपकी स्थिति में बेहतर है। Grails का मतलब है कि नए वेब ऐप्स बहुत तेज़ी से तैयार करें, यही वह जगह है जहां यह चमकता है। मौजूदा ऐप में सामान जोड़ना सिर्फ इतना नहीं है कि इसे किस प्रकार बनाया गया था।

संपादित करें: टिप्पणी में स्पष्टीकरण के संबंध में: यदि आप उन दोनों के बीच केवल संचार चैनल के रूप में मूल रूप से किसी अन्य ऐप्स के उपयोग किए गए डेटा के लिए एक डाटा एंट्री/रखरखाव दृश्यपटल लिखने के लिए डीबी योजना बना रहे हैं और है, कि हो सकता है वास्तव में Grails के साथ काफी अच्छी तरह से काम करते हैं; यह निश्चित रूप से डोमेन कक्षाओं से स्वयं को बनाने के बजाय मौजूदा डीबी स्कीमा का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है (हालांकि बाद वाला कम काम है)।

+0

धन्यवाद - क्या तुमने कहा भावना स्पष्टीकरण मेरी क्यू करने के लिए ... बनाता ऐड-ऑन मैं बात कर रहा हूँ के बारे में अपने आप में एक अलग एप्लिकेशन के रूप में उपलब्ध नहीं होगा। यह मुख्य रूप से उन वस्तुओं के लिए 'सीआरयूडी' करेगा जो मुख्य ऐप द्वारा 'संसाधित' होते हैं। न्यूनतम न्यूनतम पर- वे केवल डेटा मॉडल साझा करेंगे और यदि मैं भाग्यशाली जावा डोमेन ऑब्जेक्ट्स भी प्राप्त करता हूं। मुझे कोई इरादा नहीं है या आगे का पुन: उपयोग करने की आवश्यकता नहीं है। –

+0

क्या आपके पास Grails के साथ बहुत अनुभव है? – willcodejavaforfood

+0

@ विल्लकोडावाफॉर्फूड: मैं "बहुत कुछ" नहीं कहूंगा - मूल रूप से एक परियोजना का मूल्य। –

19

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

पहली बात यह है कि आप पहले ही स्प्रिंग और हाइबरनेट का उपयोग कर रहे हैं, और चूंकि आपके डोमेन क्लासेस पहले ही पीओजेओ हैं, इसलिए उन्हें एकीकृत करना आसान होना चाहिए। आपके पास हो सकता है कि किसी भी स्प्रिंग बीन्स को सामान्य रूप से एक XML फ़ाइल में निर्दिष्ट किया जा सके (grails-app/conf/spring/resources.xml में) या Grails की Spring bean builder सुविधा का उपयोग करके बस इतना अधिक। फिर उन्हें किसी भी नियंत्रक, दृश्य, सेवा इत्यादि में नाम से एक्सेस किया जा सकता है और सामान्य रूप से काम किया जा सकता है।

यहाँ विकल्प हैं, के रूप में मैं उन्हें देख, अपने डोमेन वर्गों और डेटाबेस स्कीमा एकीकृत करने के लिए:

  • बाईपास GORM और लोड/बचाने के लिए अपने डोमेन वस्तुओं आप पहले से ही कर रहे हैं बिल्कुल के रूप में।

    Grails आपको GORM का उपयोग करने के लिए मजबूर नहीं करता है, इसलिए यह काफी सरल होना चाहिए: अपने जावा कोड का .jar बनाएं (यदि आपने पहले से नहीं किया है) और इसे Grails ऐप की lib निर्देशिका में छोड़ दें। यदि आपकी जावा प्रोजेक्ट मैवेनाइज्ड है, तो यह भी आसान है: Grails 1.1 मेवेन के साथ काम करता है, ताकि आप अपने Grails ऐप के लिए pom.xml बना सकें और अपनी जावा प्रोजेक्ट को किसी अन्य (जावा) प्रोजेक्ट में निर्भरता के रूप में जोड़ सकें।

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

    एक टिप यदि आप इस विकल्प की कोशिश करते हैं: एक Grails सेवा (StorageService शायद) और में सार वास्तविक हठ कोड अपने नियंत्रकों बल्कि हठ सीधे निपटने की तुलना में यह पर तरीकों कॉल की है। यदि आवश्यक हो तो आप उस सेवा को सड़क के नीचे किसी अन्य चीज़ के साथ बदल सकते हैं, और जब तक आप एक ही इंटरफेस को बनाए रखते हैं तो आपके नियंत्रक प्रभावित नहीं होंगे।

  • अपने मौजूदा जावा कक्षाओं के उप-वर्गों के रूप में नए Grails डोमेन कक्षाएं बनाएं।

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

    आपको अपने मौजूदा डेटाबेस स्कीमा की वास्तविकताओं को फिट करने के लिए लगभग GORM mapping DSL के माध्यम से मैपिंग को ट्विक करने की आवश्यकता होगी। रिश्ते होंगे जहां यह मुश्किल हो सकता है। उदाहरण के लिए, आपके पास कुछ अन्य समाधान हो सकता है जहां गोरम एक जॉइन टेबल की अपेक्षा करता है, हालांकि इन तरह के मतभेदों के आसपास काम करने का एक तरीका भी हो सकता है। मैं जीओआरएम और उसके मैपिंग डीएसएल के बारे में जितना ज्यादा सीख सकता हूं और फिर अपने कुछ वर्गों के साथ प्रयोग कर सकता हूं यह देखने के लिए कि यह एक व्यवहार्य विकल्प है या नहीं।

  • क्या Grails सीधे आपके मौजूदा पीओजेओ और हाइबरनेट मैपिंग का उपयोग करते हैं।

    मैंने इसे स्वयं नहीं किया है, लेकिन Grails के Hibernate Integration page के अनुसार यह संभव है: "Grails आपको जावा में अपना डोमेन मॉडल लिखने या एक मौजूदा डोमेन मॉडल का पुन: उपयोग करने की अनुमति देता है जिसे हाइबरनेट का उपयोग करके मैप किया गया है ।आपको केवल 'hibernate.cfg.xml' फ़ाइल और संबंधित मैपिंग फ़ाइलों को '% PROJECT_HOME%/grails-app/conf/hibernate' निर्देशिका में रखना है। तुम अब भी गतिशील लगातार और क्वेरी तरीकों GORM में अनुमति के सभी कॉल करने के लिए सक्षम हो जाएगा! "

    Googling" GORM विरासत "ग्लेन स्मिथ (के सह लेखक द्वारा, उपयोगी चर्चा और उदाहरण के एक नंबर जाता उदाहरण this blog post के लिए जल्द से जल्द रिलीज एक्शन में Grails) जहां वह "हेल से विरासत डीबी" के साथ एकीकृत करने के लिए उपयोग की जाने वाली एक हाइबरनेट मैपिंग फ़ाइल दिखाता है। एक्शन में Grails का एक अध्याय है जिसका शीर्षक "उन्नत गोर्म कुंगफू" है जिसका वादा करता है इस विषय की विस्तृत चर्चा। मेरे पास किताब का प्री-रिलीज पीडीएफ है, और जब तक मुझे अभी तक उस अध्याय में नहीं मिला है, जो मैंने अभी तक पढ़ा है वह बहुत अच्छा है, और पुस्तक में कई विषयों को शामिल किया गया है जो नहीं हैं अन्य Grails किताबों में पर्याप्त चर्चा की।

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

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