2012-02-21 17 views
8

यह एक वैचारिक प्रश्न है और मैं SO में जवाब नहीं ढूंढ पा रहा हूं, इसलिए मैं यहां जाता हूं:दृश्यों के साथ "कनेक्ट" नियंत्रकों के लिए आवृत्ति चर का उपयोग क्यों करें?

नियंत्रक और विचारों को जोड़ने के लिए आवृत्ति चर का उपयोग क्यों किया जाता है? क्या हमारे पास दो अलग-अलग वर्गों (नियंत्रक बनाम दृश्य) की दो अलग-अलग वस्तुएं नहीं हैं। इसलिए, जब दृश्य प्रस्तुत किया जाता है तो हम एक अलग संदर्भ में हैं, लेकिन हम किसी अन्य ऑब्जेक्ट के इंस्टेंस चर का उपयोग कर रहे हैं? क्या यह किसी भी तरह से तोड़ने वाला encapsulation नहीं है?

रेल एक ऑब्जेक्ट से दूसरे ऑब्जेक्ट से मेल खाने का प्रबंधन कैसे करता है? क्या यह नियंत्रक के सभी उदाहरण चर को देखने के लिए क्लोन करता है?

+1

@मेगर, वास्तव में, यह सीधे चर का उपयोग करता है। रूबी दस्तावेज़ों में 'BasicObject # instance_eval' देखें और आप देखेंगे कि यह कैसे हो सकता है। 'बाध्यकारी' भी देखें। –

उत्तर

6

एक अर्थ में, आप कह सकते हैं कि यह encapsulation तोड़ रहा है। मैंने पाया है कि यदि आप सावधान नहीं हैं, तो रेल में अपने व्यापार/प्रस्तुति तर्क को मिश्रित करना आसान है। यह आमतौर पर तब शुरू होता है जब मैं एक दृश्य टेम्पलेट लिख रहा हूं, और पता चलता हूं कि मुझे कुछ मूल्य चाहिए जो मैंने नियंत्रक से नहीं पारित किया था। तो मैं वापस जाता हूं, और नियंत्रक को उस दृश्य के अनुरूप ट्विक करता हूं जो मुझे दृश्य में चाहिए। एक चिमटा के बाद, और दूसरा, और दूसरा, आप नियंत्रक विधि को देखते हैं, और यह सभी प्रकार के आवृत्ति चर सेट कर रहा है जो तब तक समझ में नहीं आता जब तक कि आप यह देखने के लिए न देखें कि वे क्या हैं। तो आप एक ऐसी परिस्थिति में समाप्त होते हैं जहां आपको एक या दूसरे को अलगाव में लेने में सक्षम होने के बजाय, दोनों नियंत्रक को देखने और देखने के लिए देखने की आवश्यकता होती है।

मुझे लगता है कि उदाहरण चर (Binding चाल के साथ) का उपयोग करके नियंत्रक से देखने के लिए आपको जो भी मूल्य चाहिए, उसे अग्रिम पैरामीटर घोषित किए बिना (जैसा कि आप किसी विधि को परिभाषित करते हैं)। कोई घोषणा का मतलब लिखने के लिए कम कोड नहीं है, और जब आप चीजों को दोबारा बदलना और पुनर्गठन करना चाहते हैं तो बदलना कम है।

4

रेल eval और Binding का उपयोग करने के लिए नियंत्रक उदाहरण चर को पास करने के लिए उपयोग करता है। this presentation from Dave Thomas देखें, मिनट 46 पर एक छोटा सा उदाहरण है जो बताता है कि यह कैसे किया जाता है।

+0

यदि मुझे सही ढंग से समझ में आया तो ओपी '@ चर' का जिक्र कर रहा था, जबकि बाध्यकारी आंशिक (स्थानीय लोगों में) को चर भेजने के लिए उपयोगी है। दिलचस्प सामान, यद्यपि। – tokland

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

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