कोडिंग c # के संदर्भ में MVC, MVP और MVVM डिज़ाइन पैटर्न में क्या अंतर है


202

यदि हम "MVC, MVP और MVVM डिज़ाइन पैटर्न के बीच अंतर क्या है" वाक्यांश का उपयोग करके Google खोजते हैं, तो हमें कुछ URL मिल सकते हैं , जो MVC MVP और MVVM डिज़ाइन पैटर्न के बीच के अंतर की सैद्धांतिक रूप से चर्चा करते हैं :

एमवीपी

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

MVVM

उन स्थितियों में उपयोग करें जहां डेटासेंक्ट के माध्यम से बाध्यकारी संभव है। क्यों? प्रत्येक दृश्य के लिए विभिन्न IVIV इंटरफेस को हटा दिया जाता है जिसका अर्थ है कम कोड बनाए रखने के लिए। कुछ उदाहरण जहां MVVM संभव है, नॉकआउट का उपयोग करके WPF और जावास्क्रिप्ट प्रोजेक्ट शामिल हैं।

MVC

उन स्थितियों में उपयोग करें जहां दृश्य और बाकी कार्यक्रम के बीच संबंध हमेशा उपलब्ध नहीं होता है (और आप एमवीवीएम या एमवीपी को प्रभावी ढंग से नियोजित नहीं कर सकते हैं)। यह स्पष्ट रूप से उस स्थिति का वर्णन करता है जहां एक वेब एपीआई क्लाइंट ब्राउज़रों को भेजे गए डेटा से अलग होता है। Microsoft का ASP.NET MVC ऐसी स्थितियों के प्रबंधन के लिए एक महान उपकरण है और एक बहुत ही स्पष्ट MVC फ्रेमवर्क प्रदान करता है


लेकिन मुझे एक भी लेख नहीं मिला है जो नमूना कोड के साथ सैद्धांतिक रूप से अंतर पर चर्चा करता है।

यह वास्तव में अच्छा होगा यदि मुझे एक लेख मिलता है जो कोड के साथ इन 3 डिजाइन पैटर्न (एमवीसी, एमवीपी और एमवीवीएम) के बीच अंतर पर चर्चा करता है।

मैं 3 समान CRUD ऐप के स्रोत कोड पर अपने हाथ प्राप्त करना चाहता हूं जो इन तीन डिजाइन पैटर्न (एमवीसी, एमवीपी और एमवीवीएम) द्वारा लागू किया गया है। ताकि मैं कोड के माध्यम से जा सकूं और समझ सकूं कि किसी को इन तीन डिजाइन पैटर्स (एमवीसी, एमवीपी और एमवीवीएम) के लिए कोड कैसे लिखना चाहिए।

इसलिए यदि ऐसा कोई लेख मौजूद है, जो चर्चा करता है कि इन 3 डिज़ाइन पैटर्न (MVC, MVP & MVVM) के लिए कोड अलग कैसे दिखेगा तो कृपया मुझे उस लेख पर पुनर्निर्देशित करें।


14
TechEd 2011 में इन 3 पैटर्न के बारे में एक अच्छी लेकिन सरल प्रस्तुति थी। स्पीकर ने C # और Visual Studio का उपयोग करके एक ही व्यवसाय मॉडल पर उदाहरण बनाए और दिखाए। यहाँ चैनल 9 MVC, MVP और MVVM
मार्को मेड्रानो सेप

2
यहाँ लेख है: realm.io/news/eric-maxwell-mvc-mvp-and-mvvm-on-android । बहुत अच्छी तरह से लिखा और स्पष्ट आईएमओ। इसमें प्रत्येक पैटर्न के लिए एक शाखा के साथ एक Github रेपो भी है।
कुडलेचेक

यह दिलचस्प था: cirw.in/blog/time-to-move-on
एंड्रयू

जवाबों:


100

कुछ बुनियादी अंतर संक्षेप में लिखे जा सकते हैं:

MVC:

पारंपरिक MVC है जहाँ एक है

  1. मॉडल: डेटा के लिए मॉडल के रूप में कार्य करता है
  2. देखें: उपयोगकर्ता को देखने के साथ सौदा जो यूआई हो सकता है
  3. नियंत्रक: मॉडल और दृश्य के बीच की बातचीत को नियंत्रित करता है, जहां व्यू कंट्रोलर को मॉडल अपडेट करने के लिए कहता है। जरूरत पड़ने पर व्यू कई कंट्रोलर को कॉल कर सकता है।

एमवीपी:

पारंपरिक MVC के समान लेकिन नियंत्रक को प्रस्तुतकर्ता द्वारा बदल दिया जाता है। लेकिन प्रस्तुतकर्ता, नियंत्रक के साथ-साथ दृश्य बदलने के लिए भी जिम्मेदार है। दृश्य आमतौर पर प्रस्तुतकर्ता को नहीं बुलाता है।

MVVM

यहाँ अंतर दृश्य मॉडल की उपस्थिति है। यह ऑब्जर्वर डिजाइन पैटर्न के कार्यान्वयन का एक प्रकार है, जहां वीएम द्वारा मॉडल में परिवर्तन को भी देखा जाता है। उदाहरण: यदि कोई स्लाइडर बदला जाता है, तो न केवल मॉडल को अपडेट किया जाता है, बल्कि डेटा जो एक पाठ हो सकता है, जिसे दृश्य में प्रदर्शित किया जाता है। इसलिए दो-तरफ़ा डेटा बाइंडिंग है।


1
छोटा विवरण - आप चुन सकते हैं कि यह दो तरह से डेटा बाइंडिंग है या आप एक ही तरह से बाइंडिंग को परिभाषित कर सकते हैं।
जुविआस

10
"दृश्य आमतौर पर प्रस्तुतकर्ता को नहीं बुलाता है"? क्या आप इस वाक्य के बारे में अधिक बता सकते हैं? यदि ui देखने वाला प्रस्तुतकर्ता को कॉल करने वाला नहीं है, तो कौन जा रहा है?
अमीर ज़ियारती

3
@AmirZiarati प्रस्तुतकर्ता घटनाओं पर नज़र रखता है। घटनाओं के मामले में प्रस्तुतकर्ता खेल में आता है और आवश्यक कार्रवाई करता है।
प्रीतम बनर्जी

हाँ जब तक यह देखने के लिए एक संदर्भ है। मुझे यह गलत लगा, मुझे लगा कि आपको यह देखने की जरूरत नहीं है कि शुरुआत में एक प्रस्तोता को कॉल करना होगा जबकि इसे कम से कम एक बार करना चाहिए। धन्यवाद;)
अमीर ज़ियारती

1
@PritamBanerjee, स्पष्टीकरण से, MVP और MVVM दोनों में लगभग समान कार्यक्षमता है। P या VM, M & V दोनों को अपडेट करते हैं
मनोहर रेड्डी Poreddy

42

एमवीसी, एमवीपी, एमवीवीएम

MVC (पुराना वाला)

एमवीपी (इसकी कम-युग्मन के कारण अधिक मॉड्यूलर। प्रस्तुतकर्ता दृश्य और मॉडल के बीच मध्यस्थ है)

एमवीवीएम (आपके पास पहले से ही वीएम और यूआई घटक के बीच दो-तरफा बंधन है, इसलिए यह एमवीपी से अधिक स्वचालित है) यहां छवि विवरण दर्ज करें

एक और छवि: यहां छवि विवरण दर्ज करें


24
कृपया केवल छवियों को कॉपी न करें - खासकर जब वे आपस में सहमत न हों। एमवीसी देखें (पुरानी तस्वीर जिसे आप नहीं देखते हैं) शीर्ष तस्वीर में देखने के लिए ब्राउज़र वार्ता, लेकिन कम तस्वीर में नियंत्रक से बात करता है।
पीटर।

1
@UddhavGautam इसकी थोड़ी भ्रामक है क्योंकि पहली छवि प्रविष्टि बिंदु के रूप में और दूसरा एक नियंत्रक दिखाता है।
सदाबहार

1
पहले आरेख में MVVM और MVP के बीच अंतर क्या है? जैसा कि मैं इसे देखता हूं, यह केवल वी और वीएम / पी के बीच लिंक है। जो एक मामले में एक द्विदिश लिंक के रूप में आगे और पीछे के संदेश हैं और दूसरे में उन्हें दो यूनिडायरेक्शनल लिंक के रूप में दर्शाया गया है। मैं उनके बीच कोई कार्यात्मक अंतर नहीं देखता हूं। मैं क्या खो रहा हूँ?
14:इबरपॉल

1
ब्राउज़र का अर्थ है उपयोगकर्ता जहां से आपके और एप्लिकेशन के बीच इंटरैक्शन होता है।
उद्धव गौतम

4
प्लॉट ट्विस्ट: वास्तव में कोई नहीं जानता कि क्या चल रहा है। वे सब वास्तव में सिर्फ एक ही बात कर रहे हैं। Haha। नहीं, लेकिन वास्तव में, यहां तक ​​कि इन "सहायक" छवियों के साथ यह संसाधित करना मुश्किल है कि बिल्ली क्या चल रही है। मुझे लगता है कि यह समस्या / भ्रम का हिस्सा है।
एंड्रयू

34

लिंक से बढ़िया व्याख्या: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx

आइए पहले MVC को देखें

इनपुट को पहले नियंत्रक पर निर्देशित किया जाता है, दृश्य को नहीं। यह इनपुट किसी पेज से इंटरेक्ट करने वाले उपयोगकर्ता से आ रहा हो सकता है, लेकिन यह किसी ब्राउज़र में किसी विशिष्ट यूआरएल को दर्ज करने से भी हो सकता है। किसी भी मामले में, इसका नियंत्रक जो कुछ कार्यक्षमता को बंद करने के लिए हस्तक्षेप करता है।

नियंत्रक और दृश्य के बीच कई-से-एक संबंध है। ऐसा इसलिए है क्योंकि एक एकल नियंत्रक निष्पादित किए जाने वाले ऑपरेशन के आधार पर प्रदान किए जाने वाले विभिन्न विचारों का चयन कर सकता है।

नियंत्रक से दृश्य तक एक तरफ़ा तीर है। ऐसा इसलिए है क्योंकि व्यू में नियंत्रक के संदर्भ या ज्ञान का कोई ज्ञान नहीं है।

नियंत्रक मॉडल को वापस पारित करता है, इसलिए दृश्य और अपेक्षित मॉडल के बीच ज्ञान होता है, लेकिन इसमें सेवारत नियंत्रक नहीं है।

एमवीपी - मॉडल देखें प्रस्तुतकर्ता

अब हम MVP पैटर्न को देखते हैं। यह कुछ प्रमुख भेदों को छोड़कर MVC के समान दिखता है:

इनपुट दृश्य से शुरू होता है, प्रस्तुतकर्ता से नहीं।

व्यू और संबद्ध प्रस्तुतकर्ता के बीच एक-से-एक मैपिंग है।

दृश्य प्रस्तुतकर्ता के लिए एक संदर्भ रखता है। प्रस्तुतकर्ता दृश्य से ट्रिगर होने वाली घटनाओं पर भी प्रतिक्रिया दे रहा है, इसलिए इसके साथ जुड़े दृश्य के बारे में इसकी जानकारी।

प्रस्तुतकर्ता मॉडल पर किए गए अनुरोध किए गए कार्यों के आधार पर दृश्य को अपडेट करता है, लेकिन दृश्य मॉडल के बारे में पता नहीं है।

MVVM - मॉडल देखें मॉडल देखें

तो हमारे सामने एमवीसी और एमवीपी पैटर्न के साथ, आइए एमवीवीएम पैटर्न को देखें और देखें कि इसमें क्या अंतर हैं:

इनपुट दृश्य से शुरू होता है, न कि दृश्य मॉडल से।

जबकि दृश्य दृश्य मॉडल का संदर्भ रखता है, दृश्य मॉडल में दृश्य के बारे में कोई जानकारी नहीं है। यही कारण है कि विभिन्न दृश्यों और एक दृश्य मॉडल के बीच एक-से-कई मैपिंग संभव है ... यहां तक ​​कि प्रौद्योगिकियों में भी। उदाहरण के लिए, एक WPF व्यू और एक सिल्वरलाइट व्यू एक ही व्यू मॉडल साझा कर सकता है।


7
"ऐसा इसलिए है क्योंकि दृश्य को नियंत्रक का कोई ज्ञान या संदर्भ नहीं है" यह सच नहीं है
एडम वोल्स्की

@AmirZiarati ViewModel MVP का नहीं बल्कि MVVM पैटर्न का हिस्सा है।
जो

मैं अच्छा होगा यदि आप इस तरह के उदाहरण प्रदान करते हैं जहां हम इन पैटर्न का उपयोग कर सकते हैं
जेकेए

3

नीचे की छवि इरविन वैन डेर वाल्क द्वारा लिखे गए लेख से है:

छवि एमवीसी, एमवीपी और एमवीवीएम की व्याख्या करते हुए - इरविन वांडरवॉक द्वारा

लेख मतभेद बताते हैं और सी # में कुछ कोड उदाहरण देता है


उपरोक्त छवियां भ्रमित नहीं कर रही हैं, जैसा कि एमवीसी में देखा गया है कि सीधे मॉडल तक पहुंच क्यों है? दूसरों के लिए समान?
smkrn110

इन आरेखों में यह स्पष्ट नहीं है कि तीर का क्या अर्थ है। क्या तीर का मतलब पहुंच या हेरफेर है? MVC आरेख में यह स्पष्ट नहीं है कि मॉडल से कोई तीर क्यों नहीं चल रहा है
पोंटियोस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.