मुझे पता है कि यह एक (रास्ता) पुराना सवाल है, लेकिन मुझे इसे एमवीसी के संदर्भ में "मॉडल देखें" का उपयोग करने का एक उदाहरण के रूप में इंगित किया गया है। मैं तर्क देता हूं कि यह गलत है और उन लोगों द्वारा भ्रम पैदा कर सकता है जो या तो/या दोनों पैटर्न के लिए नए हैं। जो भी यह कर रहा है - stahp। यहां क्यों है (और यह एक चौराहे के रास्ते में मूल प्रश्न का भी उत्तर है)।
यह होने पर एक उदाहरण this question में देखा जा सकता है। उपयोगकर्ता एक व्यू मॉडल का उपयोग करने की कोशिश कर रहा है जो एक एएसपी.नेट एमवीसी अनुप्रयोग में बदल दिया गया है, इस प्रकार एक वास्तुशिल्प असफल और दिल की धड़कन में डेस्कटॉप और स्टेटलेस वेब एप्लिकेशन डिज़ाइन को एकसाथ मैश कर रहा है।
इसे सरलता से रखने के लिए, एमवीसी पैटर्न में कोई "मॉडल देखें" नहीं है। है, हालांकि, एक कार्यात्मक समतुल्य है, और यह नियंत्रक है।बस, भागों और उनके purpouses के बारे में स्पष्ट होना
MVVM (डेस्कटॉप अनुप्रयोग):
- मॉडल - दृढ़ता से टाइप किया उद्देश्य यह है कि देखें और देखें मॉडल
- बीच भेजा जाता है डेटा रखता है देखें - यूआई उपयोगकर्ता द्वारा और जिसके माध्यम से उपयोगकर्ता प्रणाली
- देखें मॉडल साथ सूचना का आदान देखी - उपयोगकर्ता क्रियाओं (जैसे, ICommand के माध्यम से), उन्हें प्रदर्शन करती है, अद्यतन Appl व्याख्या ication राज्य
MVC (वेब अनुप्रयोगों):
- मॉडल - दृढ़ता से टाइप किया * उद्देश्य यह है कि डेटा को होल्ड देखें और देखें मॉडल
- देखें बीच भेजा जाता है - एक यूआई जनरेटर जो मॉडल, कोड और एचटीएमएल को वेबपृष्ठ प्रस्तुत करने के लिए जोड़ता है
- नियंत्रक - उपयोगकर्ता अनुरोध स्वीकार करता है, उन्हें व्याख्या करता है, आवेदन स्थिति अद्यतन करता है और एक HTML वेबपेज
मॉडल व्यावहारिक रूप से दोनों पैटर्न में एक ही है में इस राज्य कन्वर्ट करने के लिए एक दृश्य का उपयोग करता है। डेस्कटॉप मॉडल अद्यतन घटना अधिसूचनाओं को कार्यान्वित कर सकते हैं, वेब मॉडल गतिशील हो सकते हैं (यानी, दृढ़ता से टाइप नहीं किया गया), और दोनों सत्यापन विधियों या मेटाडेटा को शामिल या नहीं कर सकते हैं।
डेस्कटॉप में देखें उपयोगकर्ता क्या देखता है। वेब में, यह एक जनरेटर है जो क्लाइंट पक्ष पर प्रदर्शित करने के लिए ब्राउज़र के लिए HTML आउटपुट करता है। इसे डेस्कटॉप पर उपयोगकर्ता इंटरैक्शन की व्याख्या करनी चाहिए, लेकिन वेब पर क्लाइंट साइड जावास्क्रिप्ट, ब्राउज़र और सर्वर पर भेजे गए अनुरोधों द्वारा प्रबंधित किया गया है।
देखें मॉडल/नियंत्रक मोटे तौर पर कार्यात्मक रूप से समकक्ष हैं, लेकिन इन्हें कैसे कार्यान्वित किया जाता है और वे कैसे काम करते हैं, इस बारे में काफी भिन्न हैं। देखें मॉडल में, एप्लिकेशन के साथ उपयोगकर्ता इंटरैक्शन को आईसीओएमंड्स, रूटेड इवेंट्स और अन्य तरीकों के माध्यम से देखें मॉडल में स्थानांतरित किया जाता है (कई एमवीवीएम फ्रेमवर्क यूआई में दृश्य मॉडल को हुक करने और एप्लिकेशन के अन्य हिस्सों को हुक करने के विभिन्न तरीकों को प्रदान करते हैं)। एक नियंत्रक में, नियंत्रक के लिए आवश्यक सभी जानकारी के साथ उपयोगकर्ता के परिणाम लौटने के लिए एक अनुरोध आता है (माना जाता है कि यह 200 ओके अनुरोध है)। प्रतिक्रिया बनाने के लिए एचटीएमएल जनरेटर (दृश्य) के लिए आवश्यक राज्य (उर्फ मॉडल) बनाने के लिए नियंत्रक को जो भी काम करना आवश्यक है, उसे करना चाहिए। डिजाइन-वार, नियंत्रक दृश्य और मॉडल के ऊपर बैठता है और दोनों को नियंत्रित करता है, जबकि व्यूमोडेल दृश्य के बगल में बैठता है, जो मॉडल (और अन्य जानकारी) को उनके बीच गुजरता है।
कुछ लोगों को भ्रमित करने के लिए वास्तव में क्या लगता है कि ग्राहक पक्ष एमवीवीएम फ्रेमवर्क है कि आप अपने एमवीसी एप्लिकेशन में मिश्रण कर सकते हैं। ये उपयोगकर्ता के ब्राउज़र में पूरी तरह से जावास्क्रिप्ट में मौजूद हैं, और सर्वर पक्ष पर जो भी विशेष पैटर्न आप अनुसरण कर रहे हैं उसके साथ कुछ भी नहीं करना है। आप क्लासिक एएसपी वेबसाइट चला सकते हैं जो क्लाइंट साइड पर एमवीवीएम का उपयोग करता है। नरक, आप स्थिर एचटीएमएल पेज चला सकते हैं जो क्लाइंट साइड पर एमवीवीएम का उपयोग करते हैं। वे अलग हैं।
ये जावास्क्रिप्ट एमवीवीएम फ्रेमवर्क आमतौर पर ऊपर वर्णित डेस्कटॉप एमवीवीएम पैटर्न के समान पैटर्न का पालन करते हैं, लेकिन एचटीएमएल डोम और जावास्क्रिप्ट की प्रकृति के साथ काम करने के लिए समायोजित किए जाते हैं। उदाहरण के लिए, डीओएम में बुनाई जाने वाली कोई व्यापक बाध्यकारी प्रणाली नहीं है, और जावास्क्रिप्ट में बहुत सीमित प्रकार की प्रणाली है, इसलिए मॉडलों के लिए टेम्पलेट्स मिलान करना WPF से काफी अलग है। वे आम तौर पर सर्वर से डिस्कनेक्ट भी काम करते हैं, और जब उन्हें बातचीत करने की आवश्यकता होती है, तो पृष्ठ को वापस नियंत्रक को पोस्ट करने के बजाय AJAX कॉल पसंद करते हैं (AJAX कॉल आमतौर पर एएसपी.नेट एमवीसी में वेबएपीआई नियंत्रकों द्वारा संभाला जाता है)।
तो संक्षेप में, एमवीसी में वास्तव में एक दृश्य मॉडल नहीं है। नियंत्रक किसी न किसी समकक्ष है, लेकिन यह उपयोगकर्ता इनपुट प्राप्त करने में बहुत अलग है, इसका अर्थ है, और उपयोगकर्ता को परिणाम देता है। एमवीसी में किसी भी चीज़ का संदर्भ देने के लिए "मॉडल देखें" शब्द का उपयोग केवल भ्रम पैदा कर सकता है, और इसलिए इससे बचा जाना चाहिए। पैटर्न के उचित भागों के लिए उचित शर्तों का प्रयोग करें। यह pedantic प्रतीत हो सकता है, लेकिन यह चीजों को स्पष्ट रखने में मदद करनी चाहिए और उन दोनों लोगों के लिए कम भ्रमित होना चाहिए जो दोनों पैटर्न के लिए नए हैं।
अभ्यास में; एएसपी.नेट एमवीसी में व्यूमोडेल दृश्य में 'मैजिक स्ट्रिंग्स' की अनुमति नहीं देता है; और प्रदर्शित करने के लिए दृढ़ता से टाइप मॉडल प्रदान करता है (इंटेलिजेंस शामिल है, और वह जैज़)। अन्यथा, उत्कृष्ट जवाब। –
अच्छा जवाब। @ जॉर्ज: आप अभी भी एमवीसी में मैजिक स्ट्रिंग्स का उपयोग कर सकते हैं ... यह एमवीसी की चिंता नहीं है ... यह इस अभ्यास को रोकने के लिए कुछ भी नहीं करता है। –