कंट्रोलर को एमवीसी पैटर्न में एक दृश्य में डेटा पास करना चाहिए?


11

मैं ASP.NET MVC (और अन्य वेब-आधारित MVC कार्यान्वयन) के साथ बहुत बार काम करता हूं, लेकिन यह कुछ ऐसा है जो मुझे कभी भी सुनिश्चित नहीं हुआ है: क्या नियंत्रक और संचार को देखना चाहिए?

बेशक नियंत्रक को चुनना चाहिए कि किस दृश्य का उपयोग करना है, लेकिन मेरा क्या मतलब है कि नियंत्रक को दृश्य को डेटा पास करना चाहिए? मेरी राय में, यदि दृश्य नियंत्रक से डेटा की उम्मीद कर रहा है, तो वे प्रभावी रूप से एक (नियंत्रक, दृश्य) जोड़ी के रूप में एक साथ बंधे हैं। इसके बजाय, मेरे पास आमतौर पर मॉडल के साथ संचार करने का दृष्टिकोण है और किसी भी नियंत्रक से स्वतंत्र होना चाहिए।

क्या मेरे पास सही दृष्टिकोण है, या यह कोई सही जवाब नहीं होने का मामला है? क्या वेब बनाम अन्य वातावरण में काम करने पर उत्तर बदल जाता है? जब आपके पास दृढ़ता से टाइप किए गए दृश्य (जैसे ASP.NET MVC) की अवधारणा है तो उत्तर बदल जाता है या नहीं?


यह "एमवीसी" में "एम" के लिए है - मॉडल - जो नियंत्रक से दृश्य में पारित होने वाले डेटा का प्रतिनिधित्व करता है।
जय सुलिवन

जवाबों:


7

नियंत्रक डेटा तैयार करता है जो आगे प्रस्तुत करने / प्रदर्शित करने के लिए दृश्य को पारित किया जाएगा। यह प्रकाशित-सदस्यता तंत्र या समान के माध्यम से उपयोगकर्ता इनपुट डेटा को भी स्वीकार करता है। एमवीसी के बारे में अधिक जानकारी के लिए विकिपीडिया या मार्टिन फाउलर की वेबसाइट पर पहला आरेख देखें।

यदि दृश्य नियंत्रक से डेटा की उम्मीद कर रहा है, तो वे प्रभावी रूप से एक (नियंत्रक, दृश्य) जोड़ी के रूप में एक साथ बंधे हैं।

जबकि अधिकांश MVC फ्रेमवर्क में एक दृश्य आम तौर पर डेटा को स्वीकार करता है, यह विशिष्ट नियंत्रकों पर निर्भर नहीं करता है। उदाहरण हैं, उदाहरण के लिए, JavaServer चेहरे परिवार। सामान्यतया, रेल, Django या स्प्रिंग MVC जैसे ढांचे आपको डेटा (संदर्भ, आमतौर पर एक नक्शा / शब्दकोश / बैग) एक दृश्य (जहां एक दृश्य टेम्पलेट दृश्य पैटर्न का कार्यान्वयन होता है) के द्वारा नियंत्रकों से विचारों को डिकूप करने की अनुमति देते हैं ।

जब आपके पास दृढ़ता से टाइप किए गए दृश्य (जैसे ASP.NET MVC) की अवधारणा है तो उत्तर बदल जाता है या नहीं?

आपकी प्रोग्रामिंग भाषा दृढ़ता से टाइप की गई है या नहीं, इस पर कोई प्रभाव नहीं पड़ता है कि आप अपने एप्लिकेशन को व्यवस्थित कर रहे हैं।


किस तरह का डेटा तैयार किया जा रहा है और उसे पार किया जा रहा है? एक सरल उदाहरण लें: यह आईडी द्वारा एक लेख दिखा रहा है। क्या यह वह आईडी है जिसे सत्यापन के बाद पारित किया गया है (यह एक लेख की ओर इशारा नहीं कर सकता है), या क्या नियंत्रक को डेटाबेस से लेख मिलता है और वह पार हो जाता है?
एंडी हंट

यदि आप केवल आईडी पास करते हैं तो क्या आपका दृष्टिकोण प्रतिपादन की तुलना में अधिक काम नहीं कर रहा है? यह डेटा को पुनः प्राप्त करना होगा जो संभवतः पैटर्न की भावना में नहीं होगा।
रिग

1

आप जो सवाल उठा रहे हैं, उस पर मेरी टीम में समय-समय पर चर्चा होती है। हम दो दृष्टिकोणों के बारे में बहस करते हैं, जिसमें दोनों की अपनी सहमति और अभियोग हैं।

पहला, तर्क देता है कि नियंत्रक निम्नलिखित पैटर्न द्वारा दृश्य को अपडेट कर सकता है। यह GUI और मॉडल ईवेंट दोनों को सुनता है। जब GUI घटना होती है, तो यह मॉडल में आवश्यक कार्रवाई को निष्पादित करता है, जो बदले में आग और घटना होती है। अब नियंत्रक आमतौर पर आवश्यक डेटा के साथ दृश्य को अपडेट कर रहा है।

दूसरा दृष्टिकोण, तर्क देता है कि दृश्य स्वयं मॉडल घटनाओं को सुन रहा है और डेटा के साथ खुद को अपडेट करता है जो या तो घटना से जुड़ा हुआ है या मॉडल को क्वेरी करके।

पहले दृष्टिकोण में आपके पास नियंत्रक के लिए अधिक शक्ति है जो आपके आवेदन पर चल रही हर चीज को वास्तव में नियंत्रित कर रहा है। यह तय करने की शक्ति कि किस तरह से दृश्य को अपडेट किया जाना चाहिए कि उसके हाथों में क्या घटना है और इस तरह से आप अपना दृष्टिकोण शुद्ध रख रहे हैं। हालाँकि, जैसा कि आपने कहा था, इस तरह से आपके पास अपना दृष्टिकोण और नियंत्रक है।

दूसरे में आप उन्हें डिकोड कर रहे हैं लेकिन आपका दृष्टिकोण वास्तव में खुद को किसी तरह से नियंत्रित कर रहा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.