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

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

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

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

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

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

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


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

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

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

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

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

 * प्रिज्म लाइब्रेरी
 * कैलिबर / Caliburn.Micro
 * .NET कम्युनिटी टूलकिट
 * DevExpress MVVM
 * Chinook.DynamicMvvm खुला स्रोत
 * DotVVM ओपन सोर्स प्रोजेक्ट
 * MVVMLight Toolkit
 * जेलीफ़िश
 * 
 * Mugen MVVM टूलकिट
 * Uno Platform - Open Source
 * Rascl
 * MvvmCross
 * FreshMvvm
 * MvvmZero

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

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

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


 * Xamlcc

यह भी देखें

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

बाहरी संबंध

 * MVVM validation logic, written in Java by Tim Clare
 * MVVM validation logic, written in Java by Tim Clare
 * MVVM validation logic, written in Java by Tim Clare