जैसा कि मैं अधिक से अधिक Grails का उपयोग कर रहा हूं, मैं खुद को कई नियंत्रकों में कोड लिख रहा हूं जो वास्तव में ऐसा लगता है कि यह एक डोमेन वर्ग का हिस्सा होना चाहिए। कभी-कभी, इस डोमेन कोड में सेवा कक्षा में कॉल होता है। उदाहरण के लिए, मैं हाल ही में एक डोमेन विधि है कि कुछ इस तरह देखा लिखा है:क्या डोमेन ऑब्जेक्ट्स से Grails सेवाओं को कॉल करने के लिए यह खराब डिज़ाइन है?
class Purchase {
// Injected
def paymentService
String captureTransactionId
Boolean captured
// ...
def capture() {
captureTransactionId = paymentService.capturePurchase(this)
captured = captureTransactionId != null
}
मैं एकमुश्त गंदा लेखन इस कोड को नहीं लग रहा है, लेकिन मैं Grails में सबसे अच्छा डिजाइन प्रथाओं का एक अध्ययन नहीं किया है, इसलिए मैं कुछ राय प्राप्त करना चाहता था।
देर से टिप्पणी: सेवाओं को इंजेक्शन कब दिया जाता है? उदाहरण के लिए, यदि आप किसी डेटाबेस से 10,000 खरीद लोड करते हैं, तो क्या भुगतान सेवा उन्हें इंजेक्शन दी जाएगी? प्रदर्शन में काफी नुकसान होगा। – wishihadabettername
@ उपयोगकर्ता 277434 - हाइबरनेट वास्तव में इस प्रकार के बैच लोडिंग के लिए नहीं है। अगर मेरे पास कई बार लोड होने के लिए रिकॉर्ड थे, तो मैं हाइबरनेट का उपयोग करके छोड़ सकता हूं, या ऑब्जेक्ट सृजन से बचने के लिए प्रक्षेपण के साथ एक क्वेरी का उपयोग कर सकता हूं। –