2010-04-01 7 views
18

प्रलेखन कहते हैं:Grails: सेवा वी.एस. ग्रूवी कक्षाएं

Grails टीम, कोर आवेदन तर्क अंदर नियंत्रकों के एम्बेडिंग हतोत्साहित के रूप में यह फिर से उपयोग और चिंताओं में से एक साफ जुदाई का प्रचार नहीं है।

मेरे पास एक एपीआई नियंत्रक है और src/groovy फ़ोल्डर में कुछ ग्रोवी क्लासेस हैं। उन वर्गों सिर्फ अपने आवेदन तर्क लागू करता है तो एपीआई नियंत्रक में कार्रवाई इस तरह से काम करता है:

//index page 
def index = { 
    render new IndexApi().index(params) as JSON 
} 

मैं उत्सुक हूँ - वहाँ सेवाओं में सादे ग्रूवी वर्गों से अपने आवेदन तर्क ले जाने के लिए किसी भी कारण है?

उत्तर

9

यदि आप लेनदेन संबंधी व्यवहार चाहते हैं तो आपको सेवाओं में अपना तर्क रखना चाहिए। अन्यथा आपको इसके बारे में ख्याल रखना होगा, जो Grails का उपयोग करने की भावना में नहीं है।

खुद को एक grails विशेषज्ञ नहीं होने के नाते, मैं सेवा परत के बाहर 'लेनदेन नहीं' कक्षाओं, जैसे कि बिल्डर वर्ग, हेल्पर्स, और अन्य तर्क जो लेनदेन नहीं है लेकिन सेवा परत से उपयोग किया जाता है।

7

तीन कारण होते हैं:

  1. यह नियंत्रक छोटा होता है -> समझते हैं और बनाए रखने के

  2. यह आप तर्क आसान परीक्षण करने के लिए बनाता है के लिए आसान।

  3. आप वास्तव में अपने लेनदेन को मैन्युअल रूप से प्रबंधित नहीं करना चाहते हैं।

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

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

20

असल में सेवाएं लेनदेन के बारे में नहीं हैं। सेवाएं शून्य-कॉन्फ़िगर इंजेक्शन योग्य सिंगलटन घटकों के लिए बहुत अच्छी हैं, और उन्हें पूरे grails पर्यावरण को पुनरारंभ किए बिना पुनः लोड किया जा सकता है, और उन्हें कलाकृतियों के रूप में खोजा जा सकता है और इसलिए स्वचालित रूप से रीमोटिंग प्लगइन के साथ उजागर किया जा सकता है।