2012-07-09 19 views
13

के बीच अंतर मैं इन तीन फ़ोल्डर्स और मुझे इन्हें क्या रखना चाहिए, इसके बीच अंतर क्या है, यह जानने की कोशिश कर रहा हूं।grails-app/सेवाओं, grails-app/utils, और src फ़ोल्डर्स

अभी तक मैं कक्षा, इंटरफेस, और कुछ भी जो फेंक रहा हूं जो सीधे मेरे डोमेन वर्गों (विस्तार या कार्यान्वयन द्वारा) src फ़ोल्डर में संरचना से संबंधित है। कुछ भी जिसमें अतिरिक्त ग्राउंडल नियंत्रक डिफ़ॉल्ट रूप से करता है उससे परे अतिरिक्त लेनदेन तर्क शामिल है, मैं grails-app/services फ़ोल्डर में डाल रहा हूं। अंत में, किसी भी वर्ग जिसमें "सहायक" विधियां होती हैं (यानी विभिन्न चीजों की तुलना, विशेष स्ट्रिंग ऑपरेशंस इत्यादि) मैं grails-app/utils फ़ोल्डर में डाल रहा हूं।

यदि मुझे इन फ़ोल्डर्स का उपयोग करने के लिए चिह्न याद किया गया है तो कृपया मुझे सही रास्ते पर रखें।

+0

यह आलेख भी सहायक है: [link] (http://www.infoq.com/articles/grails-best-practices) – Arrowsmith

उत्तर

11

यह बहुत करीब है। grails-app/utils कोडेक कक्षाओं के लिए है - यह अजीब नाम और अंडर डॉक्यूमेंटेड है। मैं सहायक वर्गों को वापस src/groovy में ले जाऊंगा।

लेनदेन संबंधी कार्य करने के लिए सेवाओं का उपयोग करना बहुत अच्छा है, लेकिन आप गैर-लेनदेन संबंधी विधियों के लिए भी सेवाओं का उपयोग कर सकते हैं। उन सेवा वर्गों में static transactional = false जोड़ें जिनमें उपयोगिता विधियां हैं जिन्हें लेनदेन की आवश्यकता नहीं है। ध्यान दें कि नियंत्रकों में कोई लेनदेन नहीं है, इसलिए आपको सभी दृढ़ता को लेनदेन सेवाओं में ले जाना चाहिए।

किसी सेवा में एक src/groovy सहायक वर्ग और गैर-लेनदेन विधियों में स्थिर उपयोगिता विधियां काफी समकक्ष हैं, इसलिए मेरे लिए यह तय करना कि कौन सा मार्ग लेना निर्भरता पर निर्भर करेगा। यदि कक्षा स्प्रिंग बीन्स पर निर्भर करती है, तो इसे एक सेवा बनाएं और निर्भरता इंजेक्शन के माध्यम से उन्हें संदर्भित करें। अन्यथा इसे एक सहायक वर्ग बनाओ।

+2

मुझे लगता है कि मैं वास्तव में लेनदेन को परिभाषित करने के लिए उलझन में हूं। यहां (http://grails.1312388.n4.nabble.com/ पोस्ट- प्राधिकरण- विधि- हुक-for- प्रसंस्करण- सुरक्षा- प्लगइन-td4631011.html) मैं अपने डीबी से कुछ भी नहीं एक्सेस कर सका जब तक कि मैंने 'ट्रांजैक्शन' के साथ उपयोग नहीं किया जैसा कि आपने सुझाव दिया था, इसलिए मुझे लगता है कि डीबी तक पहुंचने वाला कोई भी तर्क "लेनदेन" था। अब ऐसा लगता है कि मेरी धारणा गलत थी। क्या आप "लेनदेन" के रूप में परिभाषित करके परिभाषित कर सकते हैं? – ubiquibacon

+0

यह एक बहुत ही सामान्य अवधारणा है, बिल्कुल कुछ नहीं जिसे आप SO पर परिभाषित करेंगे। Google इसे :) –

+1

[स्प्रिंग ट्रांजैक्शन मैनेजमेंट] से उद्धरण (http://www.tutorialspoint.com/spring/spring_transaction_management.htm): *** एक डेटाबेस लेनदेन उन कार्यों का एक अनुक्रम है जिन्हें काम की एक इकाई के रूप में माना जाता है । इन कार्यों को या तो पूरी तरह से पूरा करना चाहिए या बिल्कुल कोई प्रभाव नहीं लेना चाहिए। डेटा अखंडता और स्थिरता सुनिश्चित करने के लिए लेनदेन प्रबंधन और आरडीबीएमएस उन्मुख उद्यम अनुप्रयोगों का एक महत्वपूर्ण हिस्सा है। लेनदेन की अवधारणा को एसीआईडी ​​के रूप में वर्णित निम्नलिखित चार प्रमुख गुणों के साथ वर्णित किया जा सकता है ... *** – ubiquibacon

2

यदि आप स्वयं को डोमेन क्लास में कोई विधि जोड़ते हैं जिसमें गैर-डोमेन कक्षाओं पर निर्भरता है, तो खुद से पूछें कि यह विधि किसी सेवा में क्यों हो सकती है। इससे लगभग हर डोमेन वर्ग के लिए एक समान सेवा होती है।

इससे आपके डोमेन कक्षाओं को प्लगइन में रखना आसान हो जाता है ताकि आप एक ही डोमेन मॉडल का उपयोग करके कई ऐप्स बनाने के द्वारा कार्यक्षमता बढ़ा सकें, मिट्टी की एक अनजान बड़ी गेंद बनाने के बजाय। यह लॉक इयर्स ऑफ आर्किटेक्चर में अंकल बॉब मार्टिन द्वारा वर्णित अनुप्रयोग मॉडल के साथ भी संगत है http://www.youtube.com/watch?v=WpkDN78P884

यह देखते हुए कि आप आर्किटेक्चर के बारे में सोच रहे हैं, अंकल बॉब और मार्टिन फाउलर के कुछ कामों को पढ़ने का अच्छा विचार होगा ।