मॉडल-व्यू-व्यूमॉडल: Difference between revisions

From Vigyanwiki
(Created page with "{{short description|Software architecture design pattern}} 500px|right|upright=1.5मॉडल-व्यू-व्यूमॉडल (एमवीव...")
 
 
(7 intermediate revisions by 5 users not shown)
Line 2: Line 2:
[[Image:MVVMPattern.png|500px|right|upright=1.5]]मॉडल-व्यू-व्यूमॉडल (एमवीवीएम) कंप्यूटर सॉफ्टवेयर में एक [[वास्तु पैटर्न]] है जो [[ग्राफिकल यूज़र इंटरफ़ेस]] (जीयूआई; ''व्यू'') के विकास की चिंताओं को अलग करने की सुविधा देता है - चाहे वह [[पाठ के प्रस्तुतिकरण के लिए प्रयुक्त भाषा]] या जीयूआई कोड के माध्यम से हो- व्यापार तर्क या [[आगे और पीछे समाप्त होता है]] | बैक-एंड लॉजिक (''मॉडल'') के विकास से ऐसा कि दृश्य किसी विशिष्ट मॉडल प्लेटफॉर्म पर निर्भर नहीं है।
[[Image:MVVMPattern.png|500px|right|upright=1.5]]मॉडल-व्यू-व्यूमॉडल (एमवीवीएम) कंप्यूटर सॉफ्टवेयर में एक [[वास्तु पैटर्न]] है जो [[ग्राफिकल यूज़र इंटरफ़ेस]] (जीयूआई; ''व्यू'') के विकास की चिंताओं को अलग करने की सुविधा देता है - चाहे वह [[पाठ के प्रस्तुतिकरण के लिए प्रयुक्त भाषा]] या जीयूआई कोड के माध्यम से हो- व्यापार तर्क या [[आगे और पीछे समाप्त होता है]] | बैक-एंड लॉजिक (''मॉडल'') के विकास से ऐसा कि दृश्य किसी विशिष्ट मॉडल प्लेटफॉर्म पर निर्भर नहीं है।


MVVM का ''व्यूमॉडल'' एक वैल्यू कन्वर्टर है,<ref name="MVVM-eliminates-valueconverters">{{cite web|url=https://groups.google.com/forum/#!topic/wpf-disciples/P-JwzRB_GE8|title=Thought: MVVM eliminates 99% of the need for ValueConverters|author=Google groups}}</ref> इसका अर्थ है कि यह मॉडल से [[डेटा वस्तु]] को इस तरह से उजागर (रूपांतरित) करने के लिए ज़िम्मेदार है कि उन्हें आसानी से प्रबंधित और प्रस्तुत किया जा सके। इस संबंध में, व्यूमोडेल दृश्य से अधिक मॉडल है, और दृश्य के प्रदर्शन तर्क के अधिकांश (यदि सभी नहीं) को संभालता है।<ref name="MVVM-eliminates-valueconverters" />व्यूमोडेल दृश्य द्वारा समर्थित उपयोग मामलों के [[उदाहरण]] चारों ओर बैक-एंड तर्क तक पहुंच व्यवस्थित करने के लिए [[मध्यस्थ पैटर्न]] को कार्यान्वित कर सकता है।
एमवीवीएम का ''व्यूमॉडल'' एक मूल्य परिवर्तक है,<ref name="MVVM-eliminates-valueconverters">{{cite web|url=https://groups.google.com/forum/#!topic/wpf-disciples/P-JwzRB_GE8|title=Thought: MVVM eliminates 99% of the need for ValueConverters|author=Google groups}}</ref> इसका अर्थ है कि यह मॉडल से [[डेटा वस्तु]] को इस तरह से प्रकट (रूपांतरित) करने के लिए ज़िम्मेदार है, कि उन्हें आसानी से प्रबंधित और प्रस्तुत किया जा सके। इस संबंध में, व्यूमॉडल दृश्य से अधिक मॉडल है, और दृश्य के प्रदर्शन तर्क के अधिकांश को संभालता है।<ref name="MVVM-eliminates-valueconverters" />व्यूमॉडल दृश्य द्वारा समर्थित उपयोग मामलों के [[उदाहरण]] चारों ओर बैक-एंड तर्क तक पहुंच व्यवस्थित करने के लिए [[मध्यस्थ पैटर्न]] को कार्यान्वित कर सकता है।
 
एमवीवीएम [[मार्टिन फाउलर (सॉफ्टवेयर इंजीनियर)]] के प्रेजेंटेशन मॉडल डिजाइन पैटर्न का एक रूपांतर है।<ref>{{cite web|url=http://martinfowler.com/eaaDev/PresentationModel.html|title=The Presentation Model Design Pattern|author=Martin Fowler|date=19 July 2004|publisher=Martin Fowler.com}}</ref><ref name="JoshSmith">{{cite journal|last=Smith|first=Josh|date=February 2009|title=WPF Apps with the Model–View–ViewModel Design Pattern|url=http://msdn.microsoft.com/en-us/magazine/dd419663.aspx|journal=MSDN Magazine}}</ref> इसका आविष्कार Microsoft आर्किटेक्ट केन कूपर और टेड पीटर्स द्वारा विशेष रूप से यूजर इंटरफेस के [[घटना-संचालित प्रोग्रामिंग]] को आसान बनाने के लिए किया गया था। पैटर्न को [[विंडोज प्रेजेंटेशन फाउंडेशन]] | विंडोज प्रेजेंटेशन फाउंडेशन (WPF) ([[माइक्रोसॉफ्ट]] के .NET फ्रेमवर्क| .NET ग्राफिक्स सिस्टम) और [[सिल्वरलाइट]], WPF के इंटरनेट एप्लिकेशन डेरिवेटिव में शामिल किया गया था।<ref name="JoshSmith" />माइक्रोसॉफ्ट डब्ल्यूपीएफ और सिल्वरलाइट आर्किटेक्ट जॉन गॉसमैन ने 2005 में अपने ब्लॉग पर एमवीवीएम की घोषणा की।<ref name="JoshSmith" /><ref name="Gossman2005" />
 
मॉडल-व्यू-व्यूमॉडल को मॉडल-व्यू-बाइंडर के रूप में भी संदर्भित किया जाता है, विशेष रूप से उन कार्यान्वयनों में जिनमें .NET प्लेटफॉर्म शामिल नहीं है। [[ZK (ढांचा)]]फ्रेमवर्क), [[जावा (प्रोग्रामिंग भाषा)]] में लिखा गया एक [[वेब अनुप्रयोग ढांचा]] और [[जावास्क्रिप्ट]] [[पुस्तकालय (कम्प्यूटिंग)]] [[नॉकआउट जे.एस]] मॉडल-व्यू-बाइंडर का उपयोग करते हैं।<ref name="JoshSmith" /><ref name="SMassey">{{cite web|last=Massey|first=Simon|title=Presentation Patterns in ZK|url=http://www.slideshare.net/simbo1905/design-patterns-in-zk-java-mvvm-as-modelviewbinder|access-date=24 March 2012}}</ref><ref>{{cite web |author = Steve Sanderson |title = KnockoutJS |url = http://knockoutjs.com/documentation/observables.html}}</ref>


एमवीवीएम [[मार्टिन फाउलर (सॉफ्टवेयर इंजीनियर)]] के प्रेजेंटेशन मॉडल प्रारूपित पैटर्न का एक रूपांतर है।<ref>{{cite web|url=http://martinfowler.com/eaaDev/PresentationModel.html|title=The Presentation Model Design Pattern|author=Martin Fowler|date=19 July 2004|publisher=Martin Fowler.com}}</ref><ref name="JoshSmith">{{cite journal|last=Smith|first=Josh|date=February 2009|title=WPF Apps with the Model–View–ViewModel Design Pattern|url=http://msdn.microsoft.com/en-us/magazine/dd419663.aspx|journal=MSDN Magazine}}</ref> इसका आविष्कार माइक्रोसॉफ्ट वास्तुविद केन कूपर और टेड पीटर्स द्वारा विशेष रूप से यूजर इंटरफेस के [[घटना-संचालित प्रोग्रामिंग]] को आसान बनाने के लिए किया गया था। पैटर्न को [[विंडोज प्रेजेंटेशन फाउंडेशन]] (डब्ल्यूपीएफ) ([[माइक्रोसॉफ्ट]] के नेट फ्रेमवर्क, नेट ग्राफिक्स प्रणाली) और [[सिल्वरलाइट]], डब्ल्यूपीएफ के इंटरनेट एप्लिकेशन डेरिवेटिव में सम्मिलित किया गया था।<ref name="JoshSmith" />माइक्रोसॉफ्ट डब्ल्यूपीएफ और सिल्वरलाइट वास्तुविद जॉन गॉसमैन ने 2005 में अपने ब्लॉग पर एमवीवीएम की घोषणा की।<ref name="JoshSmith" /><ref name="Gossman2005" />


मॉडल-व्यू-व्यूमॉडल को मॉडल-व्यू-बाइंडर के रूप में भी संदर्भित किया जाता है, विशेष रूप से उन कार्यान्वयनों में जिनमें नेट प्लेटफॉर्म सम्मिलित नहीं है। [[ZK (ढांचा)|जेड के]] फ्रेमवर्क, [[जावा (प्रोग्रामिंग भाषा)]] में लिखा गया एक [[वेब अनुप्रयोग ढांचा]] और [[जावास्क्रिप्ट]] [[पुस्तकालय (कम्प्यूटिंग)]] [[नॉकआउट जे.एस]] मॉडल-व्यू-बाइंडर का उपयोग करते हैं।<ref name="JoshSmith" /><ref name="SMassey">{{cite web|last=Massey|first=Simon|title=Presentation Patterns in ZK|url=http://www.slideshare.net/simbo1905/design-patterns-in-zk-java-mvvm-as-modelviewbinder|access-date=24 March 2012}}</ref><ref>{{cite web |author = Steve Sanderson |title = KnockoutJS |url = http://knockoutjs.com/documentation/observables.html}}</ref>
== एमवीवीएम पैटर्न के घटक ==
== एमवीवीएम पैटर्न के घटक ==
;नमूना
;सैंपल
: मॉडल या तो एक [[डोमेन मॉडल]] को संदर्भित करता है, जो वास्तविक स्थिति सामग्री (एक वस्तु-उन्मुख दृष्टिकोण) का प्रतिनिधित्व करता है, या [[डेटा एक्सेस परत]] के लिए, जो सामग्री (डेटा-केंद्रित दृष्टिकोण) का प्रतिनिधित्व करता है।{{citation needed|date=February 2015}}
: मॉडल या तो एक [[डोमेन मॉडल]] को संदर्भित करता है, जो वास्तविक स्थिति सामग्री (एक वस्तु-उन्मुख दृष्टिकोण) का प्रतिनिधित्व करता है, या [[डेटा एक्सेस परत]] के लिए, जो सामग्री (डेटा-केंद्रित दृष्टिकोण) का प्रतिनिधित्व करता है।
;देखना
;देखना
: जैसा कि मॉडल-व्यू-कंट्रोलर (एमवीसी) और मॉडल-व्यू-प्रस्तुतकर्ता (एमवीपी) पैटर्न में होता है, दृश्य संरचना, लेआउट और स्क्रीन पर उपयोगकर्ता जो देखता है उसकी उपस्थिति है।<ref name="MSDN">{{Cite web|url=https://msdn.microsoft.com/en-us/library/hh848246.aspx|title=The MVVM Pattern|website=msdn.microsoft.com|access-date=2016-08-29}}</ref> यह मॉडल का एक प्रतिनिधित्व प्रदर्शित करता है और दृश्य (माउस क्लिक, कीबोर्ड इनपुट, स्क्रीन टैप जेस्चर, आदि) के साथ उपयोगकर्ता की बातचीत को प्राप्त करता है, और यह इन्हें [[डेटा बाइंडिंग]] (गुण, ईवेंट कॉलबैक) के माध्यम से दृश्य मॉडल के लिए अग्रेषित करता है। , आदि) जिसे व्यू और व्यू मॉडल को लिंक करने के लिए परिभाषित किया गया है।
: जैसा कि मॉडल-व्यू-कंट्रोलर (एमवीसी) और मॉडल-व्यू-प्रस्तुतकर्ता (एमवीपी) पैटर्न में होता है, दृश्य संरचना, लेआउट और स्क्रीन पर उपयोगकर्ता जो देखता है उसकी उपस्थिति है।<ref name="MSDN">{{Cite web|url=https://msdn.microsoft.com/en-us/library/hh848246.aspx|title=The MVVM Pattern|website=msdn.microsoft.com|access-date=2016-08-29}}</ref> यह मॉडल का एक प्रतिनिधित्व प्रदर्शित करता है और दृश्य (माउस क्लिक, कीबोर्ड इनपुट, स्क्रीन टैप जेस्चर, आदि) के साथ उपयोगकर्ता की बातचीत को प्राप्त करता है, और यह इन्हें [[डेटा बाइंडिंग]] (गुण, ईवेंट कॉलबैक) के माध्यम से दृश्य मॉडल के लिए अग्रेषित करता है। , आदि) जिसे व्यू और व्यू मॉडल को लिंक करने के लिए परिभाषित किया गया है।
मॉडल देखें
:दृश्य मॉडल सार्वजनिक संपत्तियों और आदेशों को प्रकट करने वाले दृश्य का एक सार है। एमवीसी पैटर्न के नियंत्रक या एमवीपी पैटर्न के प्रस्तुतकर्ता के अतिरिक्त, एमवीवीएम में एक बाइंडर है, जो दृश्य मॉडल में दृश्य और उसके बाध्य गुणों के बीच संचार को स्वचालित करता है। दृश्य मॉडल को मॉडल में डेटा की स्थिति के रूप में वर्णित किया गया है।<ref>{{cite web |author = Pete Weissbrod |title = Model–View–ViewModel Pattern for WPF: Yet another approach. |url = http://www.acceptedeclectic.com/2008/01/model-view-viewmodel-pattern-for-wpf.html |archive-url = https://web.archive.org/web/20080201101909/http://www.acceptedeclectic.com/2008/01/model-view-viewmodel-pattern-for-wpf.html |archive-date = 2008-02-01}}</ref>
: दृश्य मॉडल सार्वजनिक संपत्तियों और आदेशों को उजागर करने वाले दृश्य का एक सार है। एमवीसी पैटर्न के नियंत्रक या एमवीपी पैटर्न के प्रस्तुतकर्ता के बजाय, एमवीवीएम में एक बाइंडर है, जो दृश्य मॉडल में दृश्य और उसके बाध्य गुणों के बीच संचार को स्वचालित करता है। दृश्य मॉडल को मॉडल में डेटा की स्थिति के रूप में वर्णित किया गया है।<ref>{{cite web |author = Pete Weissbrod |title = Model–View–ViewModel Pattern for WPF: Yet another approach. |url = http://www.acceptedeclectic.com/2008/01/model-view-viewmodel-pattern-for-wpf.html |archive-url = https://web.archive.org/web/20080201101909/http://www.acceptedeclectic.com/2008/01/model-view-viewmodel-pattern-for-wpf.html |archive-date = 2008-02-01}}</ref>
: एमवीपी पैटर्न में दृश्य मॉडल और प्रस्तुतकर्ता के बीच मुख्य अंतर यह है कि प्रस्तुतकर्ता के पास एक दृश्य का संदर्भ होता है, जबकि दृश्य मॉडल नहीं होता है। इसके अतिरिक्त, एक दृश्य सीधे अपडेट भेजने और प्राप्त करने के लिए दृश्य मॉडल पर गुणों से जुड़ा होता है। कुशलतापूर्वक कार्य करने के लिए, इसके लिए बाइंडिंग करने के लिए एक बाध्यकारी तकनीक या [[बॉयलरप्लेट कोड]] उत्पन्न करने की आवश्यकता होती है।<ref name="MSDN" />
: एमवीपी पैटर्न में दृश्य मॉडल और प्रस्तुतकर्ता के बीच मुख्य अंतर यह है कि प्रस्तुतकर्ता के पास एक दृश्य का संदर्भ होता है, जबकि दृश्य मॉडल नहीं होता है। इसके बजाय, एक दृश्य सीधे अपडेट भेजने और प्राप्त करने के लिए दृश्य मॉडल पर गुणों से जुड़ा होता है। कुशलतापूर्वक कार्य करने के लिए, इसके लिए बाइंडिंग करने के लिए एक बाध्यकारी तकनीक या [[बॉयलरप्लेट कोड]] उत्पन्न करने की आवश्यकता होती है।<ref name="MSDN" />;जिल्दसाज़
: घोषणात्मक डेटा और कमांड-बाइंडिंग एमवीवीएम पैटर्न में निहित हैं। माइक्रोसॉफ्ट समाधान स्टैक में, बाइंडर एक मार्कअप भाषा है जिसे [[XAML|एक्सएएमएल]] कहा जाता है।<ref>{{cite web|last=Wildermuth|first=Shawn|title=Windows Presentation Foundation Data Binding: Part 1|url=http://msdn.microsoft.com/en-us/library/aa480224.aspx|publisher=Microsoft|access-date=24 March 2012}}</ref> बाइंडर डेवलपर को व्यू मॉडल और व्यू को सिंक्रोनाइज़ करने के लिए बॉयलर-प्लेट लॉजिक लिखने के लिए बाध्य होने से मुक्त करता है। जब माइक्रोसॉफ्ट स्टैक के बाहर लागू किया जाता है, तो एक घोषणात्मक डेटा बाइंडिंग तकनीक की उपस्थिति से इस पैटर्न को संभव बनाती है,<ref name="SMassey" /><ref>{{cite web|title=ZK MVVM|url=http://books.zkoss.org/wiki/Small_Talks/2012/February/New_Features_of_ZK_6#ZK_MVVM|publisher=Potix|access-date=24 March 2012}}</ref> और बाइंडर के बिना, सामान्यतः इसके अतिरिक्त एमवीपी या एमवीसी का उपयोग किया जाएगा और अधिक बॉयलरप्लेट लिखना होगा (या इसे किसी अन्य टूल से उत्पन्न करना होगा)।
: घोषणात्मक डेटा और कमांड-बाइंडिंग MVVM पैटर्न में निहित हैं। Microsoft समाधान स्टैक में, बाइंडर एक मार्कअप भाषा है जिसे [[XAML]] कहा जाता है।<ref>{{cite web|last=Wildermuth|first=Shawn|title=Windows Presentation Foundation Data Binding: Part 1|url=http://msdn.microsoft.com/en-us/library/aa480224.aspx|publisher=Microsoft|access-date=24 March 2012}}</ref> बाइंडर डेवलपर को व्यू मॉडल और व्यू को सिंक्रोनाइज़ करने के लिए बॉयलर-प्लेट लॉजिक लिखने के लिए बाध्य होने से मुक्त करता है। जब Microsoft स्टैक के बाहर लागू किया जाता है, तो एक घोषणात्मक डेटा बाइंडिंग तकनीक की उपस्थिति इस पैटर्न को संभव बनाती है,<ref name="SMassey"/><ref>{{cite web|title=ZK MVVM|url=http://books.zkoss.org/wiki/Small_Talks/2012/February/New_Features_of_ZK_6#ZK_MVVM|publisher=Potix|access-date=24 March 2012}}</ref> और बाइंडर के बिना, आमतौर पर इसके बजाय एमवीपी या एमवीसी का उपयोग किया जाएगा और अधिक बॉयलरप्लेट लिखना होगा (या इसे किसी अन्य टूल से उत्पन्न करना होगा)।
 
== तर्क ==
== तर्क ==
MVVM को व्यू लेयर से लगभग सभी ग्राफिकल यूजर इंटरफेस कोड (कोड-बैक) को हटाने के लिए डिज़ाइन किया गया था, WPF (विंडोज प्रेजेंटेशन फाउंडेशन) में डेटा बाइंडिंग फ़ंक्शंस का उपयोग करके बाकी पैटर्न से व्यू लेयर डेवलपमेंट को अलग करने की सुविधा प्रदान करने के लिए।<ref name="JoshSmith" />GUI कोड लिखने के लिए उपयोगकर्ता अनुभव डिज़ाइन (UX) डेवलपर्स की आवश्यकता के बजाय, वे फ्रेमवर्क मार्कअप लैंग्वेज (जैसे [[एक्स्टेंसिबल एप्लिकेशन मार्कअप लैंग्वेज]]) का उपयोग कर सकते हैं और व्यू मॉडल के लिए डेटा बाइंडिंग बना सकते हैं, जिसे एप्लिकेशन डेवलपर्स द्वारा लिखा और बनाए रखा जाता है। भूमिकाओं को अलग करने से इंटरएक्टिव डिजाइनरों को व्यावसायिक तर्क की प्रोग्रामिंग के बजाय यूएक्स जरूरतों पर ध्यान केंद्रित करने की अनुमति मिलती है। उच्च उत्पादकता के लिए एक अनुप्रयोग की परतें इस प्रकार कई कार्य धाराओं में विकसित की जा सकती हैं। यहां तक ​​​​कि जब एक एकल डेवलपर पूरे कोड बेस पर काम करता है, तो मॉडल से दृश्य का उचित पृथक्करण अधिक उत्पादक होता है, क्योंकि उपयोगकर्ता इंटरफ़ेस आम तौर पर एंड-यूज़र फीडबैक के आधार पर विकास चक्र में बार-बार और देर से बदलता है।{{Citation needed|date=October 2018}}
एमवीवीएम को व्यू लेयर से लगभग सभी ग्राफिकल यूजर इंटरफेस कोड (कोड-बैक) को हटाने के लिए प्रारूपित किया गया था, डब्ल्यूपीएफ (विंडोज प्रेजेंटेशन फाउंडेशन) में डेटा बाइंडिंग फ़ंक्शंस का उपयोग करके बाकी पैटर्न से व्यू लेयर डेवलपमेंट को अलग करने की सुविधा प्रदान करने के लिए।<ref name="JoshSmith" /> जीयूआई कोड लिखने के लिए उपयोगकर्ता अनुभव प्रारूप (यूएक्स) डेवलपर्स की आवश्यकता के अतिरिक्त, वे फ्रेमवर्क मार्कअप लैंग्वेज (जैसे [[एक्स्टेंसिबल एप्लिकेशन मार्कअप लैंग्वेज]]) का उपयोग कर सकते हैं, और व्यू मॉडल के लिए डेटा बाइंडिंग बना सकते हैं, जिसे एप्लिकेशन डेवलपर्स द्वारा लिखा और बनाए रखा जाता है। भूमिकाओं को अलग करने से इंटरएक्टिव प्रारूपों को व्यावसायिक तर्क की प्रोग्रामिंग के अतिरिक्त यूएक्स जरूरतों पर ध्यान केंद्रित करने की अनुमति मिलती है। उच्च उत्पादकता के लिए एक अनुप्रयोग की परतें इस प्रकार कई कार्य धाराओं में विकसित की जा सकती हैं। यहां तक ​​​​कि जब एक एकल डेवलपर पूरे कोड बेस पर काम करता है, तो मॉडल से दृश्य का उचित पृथक्करण अधिक उत्पादक होता है, क्योंकि उपयोगकर्ता इंटरफ़ेस सामान्यतः एंड-यूज़र फीडबैक के आधार पर विकास चक्र में बार-बार और देर से बदलता है।
MVVM पैटर्न MVC द्वारा प्रदान किए गए कार्यात्मक विकास के पृथक्करण के दोनों लाभों को प्राप्त करने का प्रयास करता है, जबकि डेटा बाइंडिंग के लाभों का लाभ उठाता है और डेटा को यथासंभव शुद्ध अनुप्रयोग मॉडल के करीब बांधकर रूपरेखा तैयार करता है।<ref name="JoshSmith" /><ref name="Gossman2005">{{cite web |last = Gossman |first = John |title = Tales from the Smart Client: Introduction to Model/View/ViewModel pattern for building WPF apps |date = October 8, 2005 |url = https://docs.microsoft.com/en-us/archive/blogs/johngossman/introduction-to-modelviewviewmodel-pattern-for-building-wpf-apps}}</ref><ref>{{cite web|author = Karl Shifflett|title = Learning WPF M-V-VM.|url = http://karlshifflett.wordpress.com/2008/11/08/learning-wpf-m-v-vm/|access-date = 5 June 2009|archive-url = https://web.archive.org/web/20090413205731/http://karlshifflett.wordpress.com/2008/11/08/learning-wpf-m-v-vm/|archive-date = 13 April 2009|url-status = dead}}</ref>{{clarify|date=February 2015}} यह आने वाले डेटा को मान्य करने के लिए बाइंडर, व्यू मॉडल और किसी भी व्यावसायिक परत की डेटा-जांच सुविधाओं का उपयोग करता है। इसका परिणाम यह होता है कि मॉडल और फ्रेमवर्क जितना संभव हो उतना संचालन करते हैं, एप्लिकेशन लॉजिक को समाप्त या कम करते हैं जो सीधे दृश्य में हेरफेर करता है (जैसे, कोड-बैक)।
एमवीवीएम पैटर्न MVC द्वारा प्रदान किए गए कार्यात्मक विकास के पृथक्करण के दोनों लाभों को प्राप्त करने का प्रयास करता है, जबकि डेटा बाइंडिंग के लाभों का लाभ उठाता है और डेटा को यथासंभव शुद्ध अनुप्रयोग मॉडल के निकट बांधकर रूप-रेखा तैयार करता है।<ref name="JoshSmith" /><ref name="Gossman2005">{{cite web |last = Gossman |first = John |title = Tales from the Smart Client: Introduction to Model/View/ViewModel pattern for building WPF apps |date = October 8, 2005 |url = https://docs.microsoft.com/en-us/archive/blogs/johngossman/introduction-to-modelviewviewmodel-pattern-for-building-wpf-apps}}</ref><ref>{{cite web|author = Karl Shifflett|title = Learning WPF M-V-VM.|url = http://karlshifflett.wordpress.com/2008/11/08/learning-wpf-m-v-vm/|access-date = 5 June 2009|archive-url = https://web.archive.org/web/20090413205731/http://karlshifflett.wordpress.com/2008/11/08/learning-wpf-m-v-vm/|archive-date = 13 April 2009|url-status = dead}}</ref> यह आने वाले डेटा को मान्य करने के लिए बाइंडर, व्यू मॉडल और किसी भी व्यावसायिक परत की डेटा-जांच सुविधाओं का उपयोग करता है। इसका परिणाम यह होता है कि मॉडल और फ्रेमवर्क जितना संभव हो उतना संचालन करते हैं, एप्लिकेशन लॉजिक को समाप्त या कम करते हैं जो सीधे दृश्य में हेरफेर करता है (जैसे, कोड-बैक)।


== आलोचना ==
== आलोचना ==
जॉन गॉसमैन ने एमवीवीएम पैटर्न और विशिष्ट उपयोगों में इसके आवेदन की आलोचना की है, जिसमें कहा गया है कि सरल यूजर इंटरफेस बनाते समय एमवीवीएम ओवरकिल हो सकता है। बड़े अनुप्रयोगों के लिए, उनका मानना ​​है कि पहले व्यूमॉडल को सामान्य बनाना मुश्किल हो सकता है, और यह कि बड़े पैमाने पर डेटा बाइंडिंग से प्रदर्शन कम हो सकता है।<ref>{{cite journal|author= John Gossman| title= Tales from the Smart Client: Advantages and disadvantages of M-V-VM| url= https://docs.microsoft.com/en-gb/archive/blogs/johngossman/advantages-and-disadvantages-of-m-v-vm}}</ref>
जॉन गॉसमैन ने एमवीवीएम पैटर्न और विशिष्ट उपयोगों में इसके एप्लीकेशन की आलोचना की है, जिसमें कहा गया है कि सरल यूजर इंटरफेस बनाते समय एमवीवीएम ओवरकिल हो सकता है। बड़े अनुप्रयोगों के लिए, उनका मानना ​​है कि पहले व्यूमॉडल को सामान्य बनाना मुश्किल हो सकता है, और यह कि बड़े पैमाने पर डेटा बाइंडिंग से प्रदर्शन कम हो सकता है।<ref>{{cite journal|author= John Gossman| title= Tales from the Smart Client: Advantages and disadvantages of M-V-VM| url= https://docs.microsoft.com/en-gb/archive/blogs/johngossman/advantages-and-disadvantages-of-m-v-vm}}</ref>




Line 31: Line 27:
=== नेट फ्रेमवर्क ===
=== नेट फ्रेमवर्क ===
* [https://github.com/PrismLibrary/Prism/ प्रिज्म लाइब्रेरी]
* [https://github.com/PrismLibrary/Prism/ प्रिज्म लाइब्रेरी]
*[https://github.com/CaliburnFx/Caliburn कैलिबर] / [https://caliburnmicro.com/ Caliburn.Micro]
*[https://github.com/CaliburnFx/Caliburn कैलिबर] / [https://caliburnmicro.com/ कैलिबर्न.माइक्रो]
*[https://github.com/CommunityToolkit/dotnet .NET कम्युनिटी टूलकिट]
*[https://github.com/CommunityToolkit/dotnet नेट कम्युनिटी टूलकिट]
*[https://github.com/DevExpress/DevExpress.Mvvm.Free DevExpress MVVM]
*[https://github.com/DevExpress/DevExpress.Mvvm.Free देव एक्सप्रेस एमवीवीएम]
*[https://github.com/nventive/Chinook.DynamicMvvm Chinook.DynamicMvvm] खुला स्रोत
*[https://github.com/nventive/Chinook.DynamicMvvm चिनूक डाइनमिक एमवीवीएम] खुला स्रोत
*[https://www.dotvvm.com/ DotVVM] ओपन सोर्स प्रोजेक्ट
*[https://www.dotvvm.com/ डॉट वीवीएम] ओपन सोर्स प्रोजेक्ट
*[http://www.mvvmlight.net/ MVVMLight Toolkit]
*[http://www.mvvmlight.net/ एमवीवीएम लाइट टूलकिट]
* [https://github.com/mrousavy/Jellyfish जेलीफ़िश]
* [https://github.com/mrousavy/Jellyfish जेलीफ़िश]
*[https://reactiveui.net/ReactiveUI]
*[https://reactiveui.net/ReactiveUI]
* [https://github.com/MugenMvvmToolkit/MugenMvvmToolkit Mugen MVVM टूलकिट]
* [https://github.com/MugenMvvmToolkit/MugenMvvmToolkit मगेन एमवीवीएम टूलकिट]
*[https://github.com/nventive/Uno Uno Platform - Open Source]
*[https://github.com/nventive/Uno यूनो प्लेटफ़ॉर्म - ओपन सोर्स]
*[http://www.roboticarmsoftware.com/Rascl.aspx# Rascl]
*[http://www.roboticarmsoftware.com/Rascl.aspx# रास्कल]
*[https://www.mvvmcross.com/ MvvmCross]
*[https://www.mvvmcross.com/ एमवीवीएम क्रॉस]
*[https://github.com/rid00z/FreshMvvm FreshMvvm]
*[https://github.com/rid00z/FreshMvvm फ्रेश एमवीवीएम]
*[https://www.nuget.org/packages/FunctionZero.MvvmZero MvvmZero]
*[https://www.nuget.org/packages/FunctionZero.MvvmZero एमवीवीएम जीरो]


=== जावास्क्रिप्ट चौखटे ===
=== जावास्क्रिप्ट चौखटे ===
* [[कोणीय (आवेदन मंच)]]
* [[कोणीय (आवेदन मंच)]]
*[https://aurelia.io ऑरेलिया]
*[https://aurelia.io ऑरेलिया]
*[http://durandaljs.com/ Durandal]
*[http://durandaljs.com/ डूरंडल]
* एम्बर.जेएस
* एम्बर.जेएस
*विस्तार जे.एस
*विस्तार जे.एस
*नॉकआउट (वेब ​​फ्रेमवर्क)|नॉकआउट.जेएस
*नॉकआउट (वेब ​​फ्रेमवर्क)|नॉकआउट.जेएस
*[https://github.com/Tencent/omi/blob/master/tutorial/omi-mvvm.md Omi.js]
*[https://github.com/Tencent/omi/blob/master/tutorial/omi-mvvm.md ओएमआई.जेएस]  
*[http://www.oracle.com/webfolder/technetwork/jet/index.html Oracle JET]
*[http://www.oracle.com/webfolder/technetwork/jet/index.html ऑरेकल.जेइटी]
* [[प्रतिक्रिया (जावास्क्रिप्ट पुस्तकालय)]]
* [[प्रतिक्रिया (जावास्क्रिप्ट पुस्तकालय)]]
*[[दुर्बल]]
*[[दुर्बल]]
*Vue.js
*Vue.js


=== सी ++ और एक्सएएमएल (विंडोज़) === के लिए फ्रेमवर्क
=== C++ और एक्सएएमएल (विंडोज़) के लिए फ्रेमवर्क ===
 
* [https://github.com/mntone/Xamcc एक्सएएमएल सी सी]  
* [https://github.com/mntone/Xamcc Xamlcc]


== यह भी देखें ==
== यह भी देखें ==
Line 75: Line 70:
* {{cite web |url=https://code.msdn.microsoft.com/How-to-implement-MVVM-71a65441 |title=How to implement MVVM (Model–View–ViewModel) in TDD (test-driven development) |website=[[Microsoft Developer Network]] |publisher=Microsoft}}
* {{cite web |url=https://code.msdn.microsoft.com/How-to-implement-MVVM-71a65441 |title=How to implement MVVM (Model–View–ViewModel) in TDD (test-driven development) |website=[[Microsoft Developer Network]] |publisher=Microsoft}}
* {{cite web |url=https://blogs.msdn.microsoft.com/johngossman/2005/10/08/introduction-to-modelviewviewmodel-pattern-for-building-wpf-apps/ |title=Introduction to Model/View/ViewModel pattern for building WPF apps |website=[[Microsoft Developer Network]] |publisher=Microsoft}}
* {{cite web |url=https://blogs.msdn.microsoft.com/johngossman/2005/10/08/introduction-to-modelviewviewmodel-pattern-for-building-wpf-apps/ |title=Introduction to Model/View/ViewModel pattern for building WPF apps |website=[[Microsoft Developer Network]] |publisher=Microsoft}}
* [https://github.com/simbo1905/ZkToDo2/blob/b97b353d399ad012577bef7f880f9e3167ed70a3/src/main/java/org/zkforge/zktodo2/ZkToDoViewModel.java MVVM validation logic], written in Java by Tim Clare
* [https://github.com/simbo1905/ZkToDo2/blob/b97b353d399ad012577bef7f880f9e3167ed70a3/src/main/java/org/zkforge/zktodo2/ZkToDoViewModel.java एमवीवीएम validation logic], written in Java by Tim Clare
* {{cite web |url=http://addyosmani.com/blog/understanding-mvvm-a-guide-for-javascript-developers/ |title=Understanding MVVM: A Guide for JavaScript Developers |website=AddysOnmani.com}}
* {{cite web |url=http://addyosmani.com/blog/understanding-mvvm-a-guide-for-javascript-developers/ |title=Understanding MVVM: A Guide for JavaScript Developers |website=AddysOnmani.com}}
* {{cite web |url=http://www.learnmvvm.com/ |title=MVVM Step by step tutorial |website=learnmvvm.com |url-status=dead |archive-url=https://web.archive.org/web/20200205124851/http://www.learnmvvm.com/ |archive-date=2020-02-05}}
* {{cite web |url=http://www.learnmvvm.com/ |title=MVVM Step by step tutorial |website=learnmvvm.com |url-status=dead |archive-url=https://web.archive.org/web/20200205124851/http://www.learnmvvm.com/ |archive-date=2020-02-05}}
Line 81: Line 76:
{{Use dmy dates|date=October 2018}}
{{Use dmy dates|date=October 2018}}


{{DEFAULTSORT:Model-view-viewmodel}}[[Category: सॉफ्टवेयर डिजाइन पैटर्न]] [[Category: वास्तुकला पैटर्न (कंप्यूटर विज्ञान)]] [[Category: .NET शब्दावली]]
{{DEFAULTSORT:Model-view-viewmodel}}
 
 


[[Category: Machine Translated Page]]
[[Category:.NET शब्दावली|Model-view-viewmodel]]
[[Category:Created On 18/02/2023]]
[[Category:CS1 errors]]
[[Category:Created On 18/02/2023|Model-view-viewmodel]]
[[Category:Lua-based templates|Model-view-viewmodel]]
[[Category:Machine Translated Page|Model-view-viewmodel]]
[[Category:Pages with script errors|Model-view-viewmodel]]
[[Category:Short description with empty Wikidata description|Model-view-viewmodel]]
[[Category:Templates Vigyan Ready|Model-view-viewmodel]]
[[Category:Templates that add a tracking category|Model-view-viewmodel]]
[[Category:Templates that generate short descriptions|Model-view-viewmodel]]
[[Category:Templates using TemplateData|Model-view-viewmodel]]
[[Category:Use dmy dates from October 2018|Model-view-viewmodel]]
[[Category:वास्तुकला पैटर्न (कंप्यूटर विज्ञान)|Model-view-viewmodel]]
[[Category:सॉफ्टवेयर डिजाइन पैटर्न|Model-view-viewmodel]]

Latest revision as of 12:54, 10 October 2023

MVVMPattern.png

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

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

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

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

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

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

तर्क

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

आलोचना

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


कार्यान्वयन

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

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

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

यह भी देखें

संदर्भ

  1. 1.0 1.1 Google groups. "Thought: MVVM eliminates 99% of the need for ValueConverters". {{cite web}}: |author= has generic name (help)
  2. Martin Fowler (19 July 2004). "The Presentation Model Design Pattern". Martin Fowler.com.
  3. 3.0 3.1 3.2 3.3 3.4 3.5 Smith, Josh (February 2009). "WPF Apps with the Model–View–ViewModel Design Pattern". MSDN Magazine.
  4. 4.0 4.1 Gossman, John (8 October 2005). "Tales from the Smart Client: Introduction to Model/View/ViewModel pattern for building WPF apps".
  5. 5.0 5.1 Massey, Simon. "Presentation Patterns in ZK". Retrieved 24 March 2012.
  6. Steve Sanderson. "KnockoutJS".
  7. 7.0 7.1 "The MVVM Pattern". msdn.microsoft.com. Retrieved 29 August 2016.
  8. Pete Weissbrod. "Model–View–ViewModel Pattern for WPF: Yet another approach". Archived from the original on 1 February 2008.
  9. Wildermuth, Shawn. "Windows Presentation Foundation Data Binding: Part 1". Microsoft. Retrieved 24 March 2012.
  10. "ZK MVVM". Potix. Retrieved 24 March 2012.
  11. Karl Shifflett. "Learning WPF M-V-VM". Archived from the original on 13 April 2009. Retrieved 5 June 2009.
  12. John Gossman. "Tales from the Smart Client: Advantages and disadvantages of M-V-VM". {{cite journal}}: Cite journal requires |journal= (help)


बाहरी संबंध