2013-10-18 5 views
133

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

एमवीपी

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

MVVM

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

स्थितियों में MVC

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

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

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

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

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

+9

TechEd 2011 में इन 3 पैटर्न के बारे में एक अच्छा लेकिन सरल प्रस्तुति थी। स्पीकर ने सी # और विजुअल स्टूडियो का उपयोग करके एक ही व्यापार मॉडल पर उदाहरण दिखाए और दिखाए। चैनल 9 [एमवीसी, एमवीपी और एमवीवीएम: आर्किटेक्चरल पैटर्न की तुलना] में वीडियो यहां है (http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/DPR305) –

+1

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

उत्तर

44

This एक अच्छा स्टार्टर होना चाहिए। हकीकत में, आपके चुने हुए 'मंच' भी इन पैटर्नों का उपयोग करने में एक बड़ी भूमिका निभाते हैं। उदाहरण के लिए, एमवीवीएम स्वाभाविक रूप से डब्ल्यूपीएफ के लिए उपयुक्त है, जबकि एमवीपी विंडोज फॉर्म के साथ अच्छी तरह से काम करता है। एएसपी.NET एमवीसी खुद के लिए बोलता है।

+2

ग्रेट वन! यह ध्यान दिया जाना चाहिए कि फाउलर एक शब्द के रूप में "एमवीवीएम" का उपयोग नहीं करता है - इसके बजाय वह "प्रेजेंटेशन मॉडल" का उल्लेख करता है। और लिंक्ड आलेख में, प्रस्तुति मॉडल केवल गुजरने में शामिल है। – fyodorananiev

+2

मुझे लगता है कि यह उत्तर प्रदान किए गए लिंक पर अत्यधिक निर्भर है। लिंक रोट की स्थिति में, यह पोस्ट थोड़ी उपयोगी जानकारी प्रदान करेगी, यही कारण है कि मुझे लगता है कि अन्य उत्तरों इस प्रश्न को बेहतर तरीके से संबोधित करते हैं। –

+0

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

63

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

MVC: डेटा

  • दृश्य के लिए मॉडल के रूप में कार्य करता है: वहाँ है, जहां एक

    1. मॉडल

      पारंपरिक MVC है : उपयोगकर्ता को देखने के साथ सौदे जो यूआई

    2. नियंत्रक: इंटरैक्शन betwee को नियंत्रित करता है एन मॉडल और व्यू, जहां दृश्य मॉडल को अद्यतन करने के लिए नियंत्रक को कॉल करता है। आवश्यकता होने पर देखें एकाधिक नियंत्रकों को कॉल कर सकते हैं।

    एमवीपी:

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

    MVVM

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

  • +1

    छोटे विवरण - आप चुन सकते हैं कि यह दो तरह का डेटा बाध्यकारी है या आप बाध्यकारी तरीके से एक तरह से परिभाषित कर सकते हैं। – Jviaches

    +3

    "दृश्य आमतौर पर प्रस्तुतकर्ता को कॉल नहीं करता है"? क्या आप इस वाक्य के बारे में और बता सकते हैं? अगर यूई व्यू उस प्रेजेंटर को कॉल नहीं करेगा जो जा रहा है? –

    +3

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

    23

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

    आइए MVC

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

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

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

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

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

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

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

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

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

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

    इनपुट के साथ शुरू होता है: -

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

    तो हमारे सामने MVC और MVP पैटर्न के साथ, के MVVM पैटर्न को देखो और देखते हैं कि मतभेदों को यह धारण करते हैं दृश्य मॉडल देखें, देखें।

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

    +4

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

    +0

    @AmirZiarati ViewModel एमवीपी का हिस्सा नहीं है लेकिन एमवीवीएम पैटर्न है। – Joe

    14

    MVC, एमवीपी, MVVM

    MVC (पुराने एक)

    एमपीवी

    MVVM ((इसका कम युग्मन की वजह से अधिक मॉड्यूलर। प्रस्तुतकर्ता देखें और मॉडल के बीच एक मध्यस्थ है) आप पहले से ही दो तरह वीएम और UI घटक के बीच बंधन है, तो इसे एमवीपी से अधिक स्वचालित) है enter image description here

    एक और छवि: enter image description here

    +5

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

    +0

    @ पीटर.fr, आपकी कहानियों का बचाव कैसे कर रहे हैं ?? –

    +1

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

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