मॉडल-व्यू-व्यूमॉडल

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

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

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

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

एमवीवीएम पैटर्न के घटक

 * सैंपल
 * मॉडल या तो एक डोमेन मॉडल को संदर्भित करता है, जो वास्तविक स्थिति सामग्री (एक वस्तु-उन्मुख दृष्टिकोण) का प्रतिनिधित्व करता है, या डेटा एक्सेस परत के लिए, जो सामग्री (डेटा-केंद्रित दृष्टिकोण) का प्रतिनिधित्व करता है।


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

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

आलोचना
जॉन गॉसमैन ने एमवीवीएम पैटर्न और विशिष्ट उपयोगों में इसके एप्लीकेशन की आलोचना की है, जिसमें कहा गया है कि सरल यूजर इंटरफेस बनाते समय एमवीवीएम ओवरकिल हो सकता है। बड़े अनुप्रयोगों के लिए, उनका मानना ​​है कि पहले व्यूमॉडल को सामान्य बनाना मुश्किल हो सकता है, और यह कि बड़े पैमाने पर डेटा बाइंडिंग से प्रदर्शन कम हो सकता है।

नेट फ्रेमवर्क

 * प्रिज्म लाइब्रेरी
 * कैलिबर / कैलिबर्न.माइक्रो
 * नेट कम्युनिटी टूलकिट
 * देव एक्सप्रेस एमवीवीएम
 * चिनूक डाइनमिक एमवीवीएम खुला स्रोत
 * डॉट वीवीएम ओपन सोर्स प्रोजेक्ट
 * एमवीवीएम लाइट टूलकिट
 * जेलीफ़िश
 * 
 * मगेन एमवीवीएम टूलकिट
 * यूनो प्लेटफ़ॉर्म - ओपन सोर्स
 * रास्कल
 * एमवीवीएम क्रॉस
 * फ्रेश एमवीवीएम
 * एमवीवीएम जीरो

जावास्क्रिप्ट चौखटे

 * कोणीय (आवेदन मंच)
 * ऑरेलिया
 * डूरंडल
 * एम्बर.जेएस
 * विस्तार जे.एस
 * नॉकआउट (वेब ​​फ्रेमवर्क)|नॉकआउट.जेएस
 * ओएमआई.जेएस
 * ऑरेकल.जेइटी
 * प्रतिक्रिया (जावास्क्रिप्ट पुस्तकालय)
 * दुर्बल
 * Vue.js

C++ और एक्सएएमएल (विंडोज़) के लिए फ्रेमवर्क

 * एक्सएएमएल सी सी

यह भी देखें

 * बहुस्तरीय वास्तुकला
 * मॉडल-व्यू-कंट्रोलर
 * मॉडल-दृश्य-प्रस्तुतकर्ता

बाहरी संबंध

 * एमवीवीएम validation logic, written in Java by Tim Clare
 * एमवीवीएम validation logic, written in Java by Tim Clare
 * एमवीवीएम validation logic, written in Java by Tim Clare