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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

PHP फ्रेमवर्क में निम्नलिखित शामिल हैं:
 * CodeIgniter
 * laravel
 * शुद्ध रूपरेखा

यह भी देखें

 * बहुस्तरीय वास्तुकला
 * मॉडल-व्यू-नियंत्रक
 * मॉडल-व्यू-व्यूमॉडल
 * प्रस्तोता पहले (सॉफ्टवेयर दृष्टिकोण)

बाहरी संबंध

 * Model View Presenter Example from the GWT project.
 * Model-View-Presenter implementation thoughts at StackExchange