मॉडल-दृश्य-प्रस्तोता: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Software design pattern}} File:Model View Presenter GUI Design Pattern.png|thumb|आरेख जो मॉडल-व्यू-प्रस्तुत...")
 
No edit summary
 
(11 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Software design pattern}}
{{Short description|Software design pattern}}
[[File:Model View Presenter GUI Design Pattern.png|thumb|आरेख जो मॉडल-व्यू-प्रस्तुतकर्ता (एमवीपी) जीयूआई डिज़ाइन पैटर्न को दर्शाता है]]मॉडल-व्यू-प्रस्तोता (एमवीपी) मॉडल-व्यू-कंट्रोलर (एमवीसी) [[वास्तुशिल्प पैटर्न]] की व्युत्पत्ति है, और इसका उपयोग ज्यादातर यूजर इंटरफेस बनाने के लिए किया जाता है।
[[File:Model View Presenter GUI Design Pattern.png|thumb|आरेख जो मॉडल-व्यू-प्रस्तोता (एमवीपी) जीयूआई डिज़ाइन पैटर्न को दर्शाता है]]'''मॉडल-व्यू-प्रस्तोता''' '''(एमवीपी)''' मॉडल-व्यू-कंट्रोलर (एमवीसी) [[वास्तुशिल्प पैटर्न]] की व्युत्पत्ति है और इसका उपयोग अधिकतर यूजर इंटरफेस के निर्माण के लिए किया जाता है।
 
एमवीपी में, ''प्रस्तोता'' मध्य-पुरुष की कार्यक्षमता ग्रहण करता है। एमवीपी में, सभी प्रस्तुति तर्क प्रस्तुतकर्ता को भेज दिए जाते हैं।<ref>{{cite web|url=https://developers.google.com/web-toolkit/articles/testing_methodologies_using_gwt|title=जीडब्ल्यूटी परियोजना|website=developers.google.com}}</ref>
 


एमवीपी में, प्रस्तोता "मिडिल मैन" की कार्यक्षमता मानता है। एमवीपी में, सभी प्रेजेंटेशन तर्क प्रस्तोता को भेज दिए जाते हैं।<ref>{{cite web|url=https://developers.google.com/web-toolkit/articles/testing_methodologies_using_gwt|title=जीडब्ल्यूटी परियोजना|website=developers.google.com}}</ref>
== इतिहास ==
== इतिहास ==
मॉडल-व्यू-प्रस्तोता सॉफ़्टवेयर पैटर्न की शुरुआत 1990 के दशक की शुरुआत में ऐप्पल इंक, [[आईबीएम]] और [[ हेवलेट पैकर्ड ]] के संयुक्त उद्यम [[प्रतिभावान]] में हुई थी।<ref>Needs research - This model was in use in the ERP space (Lawson Software Inc.) long before this.</ref> एमवीपी टैलिजेंट के [[सी++]]-आधारित कॉमनप्वाइंट वातावरण में अनुप्रयोग विकास के लिए अंतर्निहित प्रोग्रामिंग मॉडल है। पैटर्न को बाद में टैलिजेंट द्वारा [[जावा (प्रोग्रामिंग भाषा)]] में स्थानांतरित कर दिया गया और टैलिजेंट सीटीओ माइक पोटेल द्वारा एक पेपर में लोकप्रिय बनाया गया।<ref>
मॉडल-व्यू-प्रेजेंटर सॉफ़्टवेयर पैटर्न 1990 के दशक के प्रारंभ में एप्पल, [[आईबीएम]] और [[ हेवलेट पैकर्ड |हेवलेट पैकर्ड]] के संयुक्त उद्यम टैलिजेंट में हुई थी।<ref>Needs research - This model was in use in the ERP space (Lawson Software Inc.) long before this.</ref> एमवीपी टैलिजेंट के C++-आधारित कॉमनप्वाइंट एन्वॉयरन्मेंट में अनुप्रयोग विकास के लिए अंतर्निहित प्रोग्रामिंग मॉडल है। इस पैटर्न को बाद में टैलिजेंट द्वारा [[जावा (प्रोग्रामिंग भाषा)|जावा]] में स्थानांतरित कर दिया गया और टैलिजेंट सीटीओ माइक पोटेल द्वारा एक पेपर में लोकप्रिय बनाया गया है।<ref>
[http://www.wildcrest.com/Potel/Portfolio/mvp.pdf "MVP: Model-View-Presenter. The Taligent Programming Model for C++ and Java." Mike Potel]</ref>
[http://www.wildcrest.com/Potel/Portfolio/mvp.pdf "MVP: Model-View-Presenter. The Taligent Programming Model for C++ and Java." Mike Potel]</ref>
1998 में टैलिजेंट के बंद होने के बाद, [[डॉल्फिन स्मॉलटॉक]] के एंडी बोवर और ब्लेयर मैकग्लाशन ने अपने स्मॉलटॉक यूजर इंटरफेस फ्रेमवर्क के लिए आधार बनाने के लिए एमवीपी पैटर्न को अनुकूलित किया।<ref>
[http://www.object-arts.com/downloads/papers/TwistingTheTriad.PDF "Twisting the Triad. The evolution of the Dolphin Smalltalk MVP application framework." Andy Bower, Blair McGlashan]</ref> 2006 में, [[माइक्रोसॉफ्ट]] ने .NET फ्रेमवर्क में यूजर इंटरफेस प्रोग्रामिंग के लिए अपने दस्तावेज़ीकरण और उदाहरणों में एमवीपी को शामिल करना शुरू किया।<ref>{{cite web|url=http://msdn.microsoft.com/en-us/magazine/cc188690.aspx|title=एमएसडीएन पत्रिका अंक|website=msdn.microsoft.com}}</ref><ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/ff649571.aspx|title=मॉडल-व्यू-प्रस्तोता (एमवीपी) पैटर्न|website=msdn.microsoft.com}}</ref>
एमवीपी पैटर्न के विकास और कई वेरिएंट, जिसमें एमवीपी का एमवीसी जैसे अन्य डिजाइन पैटर्न से संबंध शामिल है, पर [[मार्टिन फाउलर (सॉफ्टवेयर इंजीनियर)]] के एक लेख में विस्तार से चर्चा की गई है।<ref>
[http://www.martinfowler.com/eaaDev/uiArchs.html "GUI Architectures" Martin Fowler]</ref> और दूसरा डेरेक ग्रीर द्वारा।<ref>{{cite web|url=http://www.aspiringcraftsman.com/2007/08/25/interactive-application-architecture/|title=इंटरएक्टिव एप्लिकेशन आर्किटेक्चर पैटर्न|website=www.aspiringcraftsman.com}}</ref>


1998 में टैलिगेंट के बंद होने के बाद, [[डॉल्फिन स्मॉलटॉक]] के एंडी बोवर और ब्लेयर मैकग्लाशन ने अपने स्मॉलटॉक यूजर इंटरफेस फ्रेमवर्क के लिए आधार बनाने के लिए एमवीपी पैटर्न को अपनाया।<ref>
[http://www.object-arts.com/downloads/papers/TwistingTheTriad.PDF "Twisting the Triad. The evolution of the Dolphin Smalltalk MVP application framework." Andy Bower, Blair McGlashan]</ref> 2006 में, [[माइक्रोसॉफ्ट]] ने .NET फ्रेमवर्क में यूजर इंटरफेस प्रोग्रामिंग के लिए अपने दस्तावेज़ीकरण और उदाहरणों में एमवीपी को सम्मिलित करना प्रारम्भ किया था।<ref>{{cite web|url=http://msdn.microsoft.com/en-us/magazine/cc188690.aspx|title=एमएसडीएन पत्रिका अंक|website=msdn.microsoft.com}}</ref><ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/ff649571.aspx|title=मॉडल-व्यू-प्रस्तोता (एमवीपी) पैटर्न|website=msdn.microsoft.com}}</ref>


एमवीपी पैटर्न के विकास और कई वेरिएंट, जिसमें एमवीपी का एमवीसी जैसे अन्य डिज़ाइन पैटर्न से संबंध सम्मिलित है, पर [[मार्टिन फाउलर (सॉफ्टवेयर इंजीनियर)|मार्टिन फाउलर]]<ref>
[http://www.martinfowler.com/eaaDev/uiArchs.html "GUI Architectures" Martin Fowler]</ref> के लेख में और डेरेक ग्रीर के अन्य लेख में विस्तार से चर्चा की गई है।<ref>{{cite web|url=http://www.aspiringcraftsman.com/2007/08/25/interactive-application-architecture/|title=इंटरएक्टिव एप्लिकेशन आर्किटेक्चर पैटर्न|website=www.aspiringcraftsman.com}}</ref>
== सिंहावलोकन ==
== सिंहावलोकन ==
एमवीपी एक उपयोगकर्ता इंटरफ़ेस आर्किटेक्चरल पैटर्न (कंप्यूटर विज्ञान) है जिसे [[ परीक्षण स्वचालन ]] यूनिट परीक्षण की सुविधा और प्रस्तुति तर्क में चिंताओं के पृथक्करण में सुधार करने के लिए इंजीनियर किया गया है:
एमवीपी उपयोगकर्ता इंटरफ़ेस वास्तुशिल्प पैटर्न है जिसे स्वचालित इकाई परीक्षण की सुविधा और प्रस्तुति तर्क में समस्याओं के पृथक्करण में सुधार करने के लिए संचालित किया गया है:
* मॉडल एक इंटरफ़ेस है जो उपयोगकर्ता इंटरफ़ेस में प्रदर्शित किए जाने वाले या अन्यथा कार्य किए जाने वाले डेटा को परिभाषित करता है।
* ''मॉडल''  इंटरफ़ेस है जो उपयोगकर्ता इंटरफ़ेस में प्रदर्शित या अन्यथा कार्य किए जाने वाले डेटा को परिभाषित करता है।
* दृश्य एक निष्क्रिय इंटरफ़ेस है जो डेटा (मॉडल) प्रदर्शित करता है और उस डेटा पर कार्य करने के लिए उपयोगकर्ता कमांड ([[ घटना (कंप्यूटिंग) ]] को प्रस्तुतकर्ता तक रूट करता है।
*''व्यू''  निष्क्रिय इंटरफ़ेस है जो डेटा (मॉडल) प्रदर्शित करता है और उस डेटा पर कार्य करने के लिए उपयोगकर्ता आदेशों (घटनाओं) को प्रस्तोता तक रूट करता है।
* प्रस्तुतकर्ता मॉडल और दृश्य पर कार्य करता है। यह रिपॉजिटरी (मॉडल) से डेटा पुनर्प्राप्त करता है, और इसे दृश्य में प्रदर्शित करने के लिए प्रारूपित करता है।
* ''प्रस्तोता'' मॉडल और व्यू पर कार्य करता है। यह रिपॉजिटरी (मॉडल) से डेटा पुनर्प्राप्त करता है, और इसे व्यू में प्रदर्शन के लिए प्रारूपित करता है।


आम तौर पर, दृश्य कार्यान्वयन [[उदाहरण (कंप्यूटर विज्ञान)]] ठोस प्रस्तुतकर्ता वस्तु, स्वयं को एक संदर्भ प्रदान करता है। निम्नलिखित सी शार्प (प्रोग्रामिंग भाषा)|सी# कोड एक सरल व्यू कंस्ट्रक्टर प्रदर्शित करता है:
सामान्यतः, व्यू कार्यान्वयन कंक्रीट प्रस्तोता ऑब्जेक्ट को त्वरित करता है, स्वयं को एक संदर्भ प्रदान करता है। निम्नलिखित C # कोड सरल व्यू निर्माता को प्रदर्शित करता है:


<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
Line 39: Line 37:
}
}
</syntaxhighlight>
</syntaxhighlight>
दृश्य में अनुमत तर्क की डिग्री विभिन्न कार्यान्वयनों के बीच भिन्न होती है। एक चरम पर, दृश्य पूरी तरह से निष्क्रिय है, जो सभी इंटरैक्शन संचालन को प्रस्तुतकर्ता को अग्रेषित करता है। इस फॉर्मूलेशन में, जब कोई उपयोगकर्ता दृश्य की एक ईवेंट विधि को ट्रिगर करता है, तो यह प्रस्तुतकर्ता की एक विधि को आमंत्रित करने के अलावा कुछ नहीं करता है जिसमें कोई पैरामीटर नहीं होता है और कोई रिटर्न मान नहीं होता है। फिर प्रस्तुतकर्ता दृश्य इंटरफ़ेस द्वारा परिभाषित विधियों के माध्यम से दृश्य से डेटा पुनर्प्राप्त करता है। अंत में, प्रस्तुतकर्ता मॉडल पर काम करता है और ऑपरेशन के परिणामों के साथ दृश्य को अपडेट करता है। मॉडल-व्यू-प्रस्तोता के अन्य संस्करण इस संबंध में कुछ अक्षांश की अनुमति देते हैं कि कौन सा वर्ग किसी विशेष इंटरैक्शन, ईवेंट या कमांड को संभालता है। यह अक्सर वेब-आधारित आर्किटेक्चर के लिए अधिक उपयुक्त होता है, जहां दृश्य, जो क्लाइंट के ब्राउज़र पर निष्पादित होता है, किसी विशेष इंटरैक्शन या कमांड को संभालने के लिए सबसे अच्छी जगह हो सकता है।
व्यू में अनुमत तर्क की डिग्री विभिन्न कार्यान्वयनों के बीच भिन्न होती है। अधिकतम पर, व्यू पूरी तरह से निष्क्रिय है, जो सभी इंटरैक्शन संचालन को प्रस्तोता को अग्रेषित करता है। इस फॉर्मूलेशन में, जब कोई उपयोगकर्ता व्यू की एक ईवेंट विधि ट्रिगर करता है, तो यह प्रस्तोता की एक विधि को आमंत्रित करने के अलावा कुछ नहीं करता है जिसमें कोई पैरामीटर नहीं होता है और कोई रिटर्न वैल्यू नहीं होता है। इसके बाद प्रस्तोता व्यू इंटरफ़ेस द्वारा परिभाषित तरीकों के माध्यम से व्यू से डेटा पुनर्प्राप्त करता है। अंत में, प्रस्तोता मॉडल पर कार्य करता है और ऑपरेशन के परिणामों के साथ व्यू को अद्यतन करता है। मॉडल-व्यू-प्रस्तोता के अन्य संस्करण इस संबंध में कुछ अक्षांश की अनुमति देते हैं कि कौन सा वर्ग किसी विशेष इंटरैक्शन, घटना या कमांड को संभालता है। यह प्रायः वेब-आधारित आर्किटेक्चर के लिए अधिक उपयुक्त होता है, जहां क्लाइंट के ब्राउज़र पर निष्पादित व्यू, किसी विशेष इंटरैक्शन या कमांड को संभालने के लिए सबसे अच्छी जगह हो सकता है।


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


== कार्यान्वयन ==
== कार्यान्वयन ==


=== .NET ===
=== .NET ===
.NET फ्रेमवर्क|.NET वातावरण किसी भी अन्य विकास वातावरण की तरह एमवीपी पैटर्न का समर्थन करता है। एक ही मॉडल और प्रस्तुतकर्ता वर्ग का उपयोग कई इंटरफेस का समर्थन करने के लिए किया जा सकता है, जैसे कि ASP.NET वेब एप्लिकेशन, [[विंडोज़ फॉर्म]] एप्लिकेशन या [[सिल्वरलाइट]] एप्लिकेशन। प्रस्तुतकर्ता एक इंटरफ़ेस के माध्यम से दृश्य से जानकारी प्राप्त करता है और सेट करता है जिसे इंटरफ़ेस (दृश्य) घटक द्वारा एक्सेस किया जा सकता है।
.NET एनवायरनमेंट किसी भी अन्य डेवलोपमेन्ट एनवायरनमेंट की तरह एमवीपी पैटर्न का समर्थन करता है। एक ही मॉडल और प्रस्तोता वर्ग का उपयोग एकाधिक इंटरफ़ेस का समर्थन करने के लिए किया जा सकता है, जैसे ASP.NET वेब एप्लिकेशन, [[विंडोज़ फॉर्म]] एप्लिकेशन या [[सिल्वरलाइट]] एप्लिकेशन। प्रस्तोता एक इंटरफ़ेस के माध्यम से व्यू से/में जानकारी प्राप्त करता है और सेट करता है जिसे इंटरफ़ेस (व्यू) घटक द्वारा एक्सेस किया जा सकता है।


पैटर्न को मैन्युअल रूप से लागू करने के अलावा, अधिक स्वचालित फैशन में एमवीपी पैटर्न का समर्थन करने के लिए एक मॉडल-व्यू-प्रस्तुतकर्ता ढांचे का उपयोग किया जा सकता है।
पैटर्न को मैन्युअल रूप से प्रयुक्त करने के अतिरिक्त, एमवीपी पैटर्न को अधिक स्वचालित तरीके से समर्थन देने के लिए मॉडल-व्यू-प्रस्तोता फ्रेमवर्क का उपयोग किया जा सकता है।


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


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


Google वेब टूलकिट में एमवीपी को लागू करने के लिए केवल यह आवश्यक है कि कुछ घटक व्यू इंटरफ़ेस को लागू करें। वाडिन या इको (फ्रेमवर्क) वेब फ्रेमवर्क का उपयोग करके भी यही दृष्टिकोण संभव है।
जावा फ्रेमवर्क में निम्नलिखित सम्मिलित हैं:


जावा फ्रेमवर्क में निम्नलिखित शामिल हैं:
* [[जावाएफएक्स]]
* [[जावाएफएक्स]]
* [[प्रतिध्वनि (ढांचा)]]
* इको2
* [[गूगल वेब टूलकिट]]
* गूगल वेब टूलकिट
* [[जेफ़ेस]]
* [[जेफ़ेस]]
* स्विंग (जावा)
* स्विंग  
* [[वादिन]]
* [[वादिन]]
* [[ZK (ढांचा)]]
* ज़ेडके


=== [[पीएचपी]] ===
=== [[पीएचपी]] ===
PHP के लचीले रनटाइम वातावरण के कारण, एप्लिकेशन लॉजिक के दृष्टिकोण की व्यापक संभावनाएं हैं। मॉडल परत का कार्यान्वयन अंतिम एप्लिकेशन प्रोग्रामर पर छोड़ दिया गया है।
जहां तक पीएचपी के फ्लेक्सिबल रनटाइम एन्वॉयरमेंट का विषय है, एप्लिकेशन लॉजिक के दृष्टिकोण की व्यापक संभावनाएं हैं। मॉडल लेयर का कार्यान्वयन अंतिम एप्लिकेशन प्रोग्रामर पर छोड़ दिया गया है।


PHP फ्रेमवर्क में निम्नलिखित शामिल हैं:
पीएचपी फ्रेमवर्क में निम्नलिखित सम्मिलित हैं:
* [[CodeIgniter]]
 
* [[laravel]]
* कोडइग्नाइटर
* [[शुद्ध रूपरेखा]]
* लारवेल
* नेट फ्रेमवर्क


==यह भी देखें==
==यह भी देखें==
* [[बहुस्तरीय वास्तुकला]]
 
* मल्टीटियर आर्किटेक्चर
* मॉडल-व्यू-नियंत्रक
* मॉडल-व्यू-नियंत्रक
* मॉडल-व्यू-व्यूमॉडल
* मॉडल-व्यू-व्यूमॉडल
* प्रस्तुतकर्ता पहले (सॉफ्टवेयर दृष्टिकोण)
* प्रस्तोता प्रथम (सॉफ़्टवेयर दृष्टिकोण)


==संदर्भ==
==संदर्भ==
Line 88: Line 89:
* [http://programmers.stackexchange.com/questions/60774/model-view-presenter-implementation-thoughts Model-View-Presenter implementation thoughts at StackExchange]
* [http://programmers.stackexchange.com/questions/60774/model-view-presenter-implementation-thoughts Model-View-Presenter implementation thoughts at StackExchange]


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


[[Category: Machine Translated Page]]
[[Category:Created On 26/06/2023|Model-view-presenter]]
[[Category:Created On 26/06/2023]]
[[Category:Lua-based templates|Model-view-presenter]]
[[Category:Machine Translated Page|Model-view-presenter]]
[[Category:Pages with script errors|Model-view-presenter]]
[[Category:Templates Vigyan Ready|Model-view-presenter]]
[[Category:Templates that add a tracking category|Model-view-presenter]]
[[Category:Templates that generate short descriptions|Model-view-presenter]]
[[Category:Templates using TemplateData|Model-view-presenter]]
[[Category:वास्तुशिल्प पैटर्न (कंप्यूटर विज्ञान)|Model-view-presenter]]
[[Category:सॉफ़्टवेयर डिज़ाइन पैटर्न|Model-view-presenter]]

Latest revision as of 20:56, 5 July 2023

आरेख जो मॉडल-व्यू-प्रस्तोता (एमवीपी) जीयूआई डिज़ाइन पैटर्न को दर्शाता है

मॉडल-व्यू-प्रस्तोता (एमवीपी) मॉडल-व्यू-कंट्रोलर (एमवीसी) वास्तुशिल्प पैटर्न की व्युत्पत्ति है और इसका उपयोग अधिकतर यूजर इंटरफेस के निर्माण के लिए किया जाता है।

एमवीपी में, प्रस्तोता "मिडिल मैन" की कार्यक्षमता मानता है। एमवीपी में, सभी प्रेजेंटेशन तर्क प्रस्तोता को भेज दिए जाते हैं।[1]

इतिहास

मॉडल-व्यू-प्रेजेंटर सॉफ़्टवेयर पैटर्न 1990 के दशक के प्रारंभ में एप्पल, आईबीएम और हेवलेट पैकर्ड के संयुक्त उद्यम टैलिजेंट में हुई थी।[2] एमवीपी टैलिजेंट के C++-आधारित कॉमनप्वाइंट एन्वॉयरन्मेंट में अनुप्रयोग विकास के लिए अंतर्निहित प्रोग्रामिंग मॉडल है। इस पैटर्न को बाद में टैलिजेंट द्वारा जावा में स्थानांतरित कर दिया गया और टैलिजेंट सीटीओ माइक पोटेल द्वारा एक पेपर में लोकप्रिय बनाया गया है।[3]

1998 में टैलिगेंट के बंद होने के बाद, डॉल्फिन स्मॉलटॉक के एंडी बोवर और ब्लेयर मैकग्लाशन ने अपने स्मॉलटॉक यूजर इंटरफेस फ्रेमवर्क के लिए आधार बनाने के लिए एमवीपी पैटर्न को अपनाया।[4] 2006 में, माइक्रोसॉफ्ट ने .NET फ्रेमवर्क में यूजर इंटरफेस प्रोग्रामिंग के लिए अपने दस्तावेज़ीकरण और उदाहरणों में एमवीपी को सम्मिलित करना प्रारम्भ किया था।[5][6]

एमवीपी पैटर्न के विकास और कई वेरिएंट, जिसमें एमवीपी का एमवीसी जैसे अन्य डिज़ाइन पैटर्न से संबंध सम्मिलित है, पर मार्टिन फाउलर[7] के लेख में और डेरेक ग्रीर के अन्य लेख में विस्तार से चर्चा की गई है।[8]

सिंहावलोकन

एमवीपी उपयोगकर्ता इंटरफ़ेस वास्तुशिल्प पैटर्न है जिसे स्वचालित इकाई परीक्षण की सुविधा और प्रस्तुति तर्क में समस्याओं के पृथक्करण में सुधार करने के लिए संचालित किया गया है:

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

सामान्यतः, व्यू कार्यान्वयन कंक्रीट प्रस्तोता ऑब्जेक्ट को त्वरित करता है, स्वयं को एक संदर्भ प्रदान करता है। निम्नलिखित C # कोड सरल व्यू निर्माता को प्रदर्शित करता है:

public class Presenter : IPresenter {
    public Presenter(IView view) {
        ...
    }
}

public class View : IView
{
    private IPresenter _presenter;

    public View()
    {
        _presenter = new Presenter(this);
    }
}

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

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

कार्यान्वयन

.NET

.NET एनवायरनमेंट किसी भी अन्य डेवलोपमेन्ट एनवायरनमेंट की तरह एमवीपी पैटर्न का समर्थन करता है। एक ही मॉडल और प्रस्तोता वर्ग का उपयोग एकाधिक इंटरफ़ेस का समर्थन करने के लिए किया जा सकता है, जैसे ASP.NET वेब एप्लिकेशन, विंडोज़ फॉर्म एप्लिकेशन या सिल्वरलाइट एप्लिकेशन। प्रस्तोता एक इंटरफ़ेस के माध्यम से व्यू से/में जानकारी प्राप्त करता है और सेट करता है जिसे इंटरफ़ेस (व्यू) घटक द्वारा एक्सेस किया जा सकता है।

पैटर्न को मैन्युअल रूप से प्रयुक्त करने के अतिरिक्त, एमवीपी पैटर्न को अधिक स्वचालित तरीके से समर्थन देने के लिए मॉडल-व्यू-प्रस्तोता फ्रेमवर्क का उपयोग किया जा सकता है।

जावा

जावा (एडब्ल्यूटी/स्विंग/एसडब्ल्यूटी) एप्लिकेशन में, एमवीपी पैटर्न का उपयोग यूजर इंटरफेस क्लास को एक व्यू इंटरफेस प्रयुक्त करने की अनुमति देकर किया जा सकता है।

जावा वेब-आधारित अनुप्रयोगों के लिए समान दृष्टिकोण का उपयोग किया जा सकता है क्योंकि आधुनिक जावा घटक-आधारित वेब फ्रेमवर्क मोटे क्लाइंट के समान घटक दृष्टिकोण का उपयोग करके क्लाइंट-साइड लॉजिक के विकास की अनुमति देते हैं।

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

जावा फ्रेमवर्क में निम्नलिखित सम्मिलित हैं:

पीएचपी

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

पीएचपी फ्रेमवर्क में निम्नलिखित सम्मिलित हैं:

  • कोडइग्नाइटर
  • लारवेल
  • नेट फ्रेमवर्क

यह भी देखें

  • मल्टीटियर आर्किटेक्चर
  • मॉडल-व्यू-नियंत्रक
  • मॉडल-व्यू-व्यूमॉडल
  • प्रस्तोता प्रथम (सॉफ़्टवेयर दृष्टिकोण)

संदर्भ

  1. "जीडब्ल्यूटी परियोजना". developers.google.com.
  2. Needs research - This model was in use in the ERP space (Lawson Software Inc.) long before this.
  3. "MVP: Model-View-Presenter. The Taligent Programming Model for C++ and Java." Mike Potel
  4. "Twisting the Triad. The evolution of the Dolphin Smalltalk MVP application framework." Andy Bower, Blair McGlashan
  5. "एमएसडीएन पत्रिका अंक". msdn.microsoft.com.
  6. "मॉडल-व्यू-प्रस्तोता (एमवीपी) पैटर्न". msdn.microsoft.com.
  7. "GUI Architectures" Martin Fowler
  8. "इंटरएक्टिव एप्लिकेशन आर्किटेक्चर पैटर्न". www.aspiringcraftsman.com.


बाहरी संबंध