2012-04-26 17 views
5

काफी बड़ी परियोजना में मुझे गहरे मॉडल घोंसले की समस्या का सामना करना पड़ा।रेल पर रूबी में दीप मॉडल घोंसले

class Communication::Conversation::ForProposal < Communication::Conversation::Base 
    ... 
end 

और इसके अलावा हर बार जब हम TABLE_NAME, CLASS_NAME, foreign_keys और इतने पर निर्दिष्ट करना होगा: उदाहरण के लिए इस तरह एक मॉडल वहाँ मौजूद है।

आप क्या विकल्प जानते हैं और वास्तव में आपके राय मॉडल में कैसे नामित किया जाना चाहिए?

+1

नामस्थान मॉडल नाम न दें। –

+0

@ बेयरलिंगटन बिल्कुल? कभी-कभी यह समझ में आता है। उदाहरण के लिए, यदि आपके पास इस परियोजना में कुछ उपप्रणाली है जिसमें कई मॉडल एक साथ काम कर रहे हैं। –

+0

मेरे दोस्तों के साथ एक संवाद था इसलिए हमने निष्कर्ष निकाला कि एसटीआई मॉडल और नियंत्रकों के लिए घोंसला ठंडा है, व्यवस्थापक :: और उपयोगकर्ता भागों को अलग करने के लिए। और कुछ? – makaroni4

उत्तर

0

आपको मिश्रणों का उपयोग करना चाहिए। यह आपको कार्यात्मकताओं द्वारा अपना कोड व्यवस्थित करने में मदद करता है, जो आपको क्लीनर कोड पर ले जाता है। निम्नलिखित पृष्ठ इसे अच्छी तरह से बताता है।

http://juixe.com/techknow/index.php/2006/06/15/mixins-in-ruby/

मैं GitHub पर रेल के लिए कुछ स्रोत कोड देख कर दिया गया है, और यह बहुत साफ है। वे मिश्रित मिश्रण का उपयोग करते हैं।

https://github.com/rails/rails/tree/master/activemodel/lib

+0

मिश्रणों का उपयोग मॉडल को एक साथ समूहित नहीं करता है। मेरे पास अन्य डेटाबेस के लिए अतिरिक्त कनेक्शन हैं, (हालांकि यह एक संक्रमणकालीन उपाय है), और कुछ डेटाबेस में एक ही टेबल नाम हैं, इसलिए नेमस्पेसिंग नाम टकराव भी फैलता है, जिसके लिए मिश्रित कोई मदद नहीं करते हैं। –

+0

मैं आरईएक्सएमएल उपयोगिता के दस्तावेज़ीकरण में देखता हूं जिसमें आरईएक्सएमएल शामिल करने का एक उदाहरण है और फिर नामस्थान को अर्हता प्राप्त नहीं करना है। http://www.germane-software.com/software/rexml/docs/tutorial.html –

0

रेल के हाल के संस्करणों में आप एप्लिकेशन/मॉडल के तहत एक निर्देशिका में उन्हें रख कर अपनी मॉडल नाम स्थान सकते हैं। आप उन मॉडलों के लिए ऐप/मॉडल/संचार/बातचीत का प्रयास कर सकते हैं।

+0

मॉडल का उपयोग करते समय नामस्थान निर्दिष्ट करने के मुद्दे को संबोधित नहीं करता है। –

+0

मैं इस बात पर स्पष्ट नहीं हूं कि आप कहां करते हैं और नामस्थान निर्दिष्ट नहीं करना चाहते हैं। यदि यह उनमें से प्रत्येक को लिखते समय और दूसरों के बारे में बात करते समय होता है, तो आप चीजों को स्पष्टता के लिए मॉड्यूल में लपेट सकते हैं। मॉड्यूल के भीतर कक्षाओं के लिए किसी भी संदर्भ को उपसर्ग की आवश्यकता नहीं है। यदि आप मॉड्यूल के बाहर नेमस्पेस निर्दिष्ट करने की आवश्यकता को कम करने की कोशिश कर रहे हैं, तो आपको 'मॉड्यूलनाम' शामिल करने की आवश्यकता है, लेकिन मुझे लगता है कि पूरे मॉड्यूल को वर्तमान कक्षा में लोड कर देगा। – LordJavac

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