मैं 4 से अधिक वर्षों तक रेल का उपयोग कर रहा हूं, इसलिए जाहिर है कि मुझे रेल पसंद है और रेलवे की तरह काम करना पसंद है और कभी-कभी मैं अनजाने में अंधेरे पक्ष में पड़ता हूं।क्या हम एक हाइब्रिड संरचना के रूप में रेल ActiveRecord का उपयोग करते हैं, यानी डेटा संरचना + ऑब्जेक्ट?
मैंने हाल ही में अंकल बॉब द्वारा स्वच्छ कोड उठाया। मैं अध्याय 6 पर हूं और थोड़ा उलझन में हूं कि क्या हम रेल डेवलपर्स ओओ डिजाइन के बहुत ही मौलिक नियम को तोड़ते हैं, यानी डेमेटर या encapsulation का कानून? डेमेटर के कानून में कहा गया है कि किसी ऑब्जेक्ट को किसी अन्य ऑब्जेक्ट के अंदरूनी हिस्से को नहीं जानना चाहिए और इसे किसी विधि द्वारा लौटाए गए ऑब्जेक्ट्स पर विधियों का आह्वान नहीं करना चाहिए क्योंकि जब आप ऐसा करते हैं तो यह सुझाव देता है कि एक ऑब्जेक्ट अन्य ऑब्जेक्ट के बारे में बहुत कुछ जानता है।
लेकिन अक्सर हम मॉडल से किसी अन्य ऑब्जेक्ट पर विधियों को कॉल करते हैं। उदाहरण के लिए, जब हमारे पास 'एक उपयोगकर्ता से संबंधित आदेश' जैसे संबंध होते हैं। फिर अक्सर हम order.user.name कर रहे हैं या इसे ट्रेन के मलबे की तरह दिखने से रोकने के लिए हमने ऑर्डर करने के लिए एक प्रतिनिधि स्थापित किया है। नाम।
क्या यह अभी भी डेमेटर या encapsulation के कानून तोड़ने की तरह नहीं है?
दूसरा प्रश्न यह है: ActiveRecord केवल डेटा संरचना या डेटा ट्रांसफर ऑब्जेक्ट है जो डेटाबेस के साथ इंटरफेस करता है?
यदि हां, तो क्या हम एक हाइब्रिड संरचना नहीं बनाते हैं, यानी आधा ऑब्जेक्ट और आधा डेटा संरचना ActiveRecord मॉडल में हमारे व्यवसाय नियम डालकर नहीं? अगर आप बहुत ज्यादा तो शुद्धतावादी दृष्टिकोण का पालन करें आप जावा की तरह एक मेस में खत्म
किताबें कभी भी गंभीरता से न लें। बेशक "कोड पूर्ण" को छोड़कर। – vava
इस तरह के "नियम" और "कानून" कोड को साफ करने के लिए सिर्फ सुझाव हैं। जब यह उनका उल्लंघन करने के लिए क्लीनर होता है, तो बस इसे करें। – luikore
मैं निश्चित रूप से एक नियम का उल्लंघन कर सकता हूं अगर मुझे पता है कि यह उल्लंघन लंबी अवधि में एक डिजाइन समस्या का कारण नहीं बन रहा है और यदि किसी भी नियम का उल्लंघन किये बिना क्लीनर कोड प्राप्त करने का कोई तरीका है तो यह बेहतर तरीका होगा:) – nas