c# - कोडिंग सी#के संदर्भ में एमवीसी, एमवीपी और एमवीवीएम डिजाइन पैटर्न के बीच क्या अंतर है




design-patterns model-view-controller (3)

लिंक से महान स्पष्टीकरण: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx

आइए पहले एमवीसी देखें

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

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

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

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

एमवीपी - मॉडल व्यू प्रेजेंटर

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

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

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

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

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

एमवीवीएम - मॉडल देखें मॉडल देखें

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

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

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

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

एमवीपी

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

MVVM

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

MVC

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

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

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

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

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


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

MVC:

पारंपरिक एमवीसी है जहां एक है

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

एमवीपी:

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

MVVM

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


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

एमवीसी (पुराना एक)

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

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

एक और छवि:





mvp