क्या मॉडल-व्यू-प्रस्तोता (एमवीपी) योजना Android के लिए उपयोगी है?


34

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

"मॉडल में प्रस्तुतकर्ता केवल मार्टिन फाउलर या माइकल फेदर [2] कहते हैं, यूआई का तर्क प्रस्तुतकर्ता नामक एक वर्ग में अलग हो जाता है, जो उपयोगकर्ता के सभी इनपुट को संभालता है और जो" गूंगा "दृश्य बताता है कि क्या और कब साझा करना है प्रदर्शन "( यहाँ से उद्धृत )।

अब तक मैंने सोचा था कि एंड्रॉइड की मुख्य विशेषताओं में से एक स्मार्ट गतिविधि है जो कार्रवाई करती है, उन पर प्रतिक्रिया करती है और परिणाम दिखाती है। क्या एमवीपी योजना Android दर्शन के साथ विरोधाभास है? क्या एंड्रॉइड पर इसे महसूस करने की कोशिश करना समझदारी है? यदि हाँ, तो यह कैसे किया जा सकता है?


2
+1 अच्छा प्रश्न है क्योंकि मैंने अभी तक एंड्रॉइड ऐप स्रोतों में mvp / mvvm को नहीं देखा है। यह देखना दिलचस्प होगा कि mvp एंड्रॉइड उदाहरण और उनके द्वारा उत्पादित कोड / लिबास ओवरहेड कितना है। इस मुद्दे पर Stackoverflow की अनुशंसा की-तरीके-से-उत्पादन-ऐप-पोर्टेबल-बीच-बीच-एंड्रॉइड और अन्य प्लेटफार्मों
k3b

हो सकता है, मैं इसे Stackoverflow में डाल सकता हूँ, या यह नियमों के विरुद्ध होगा?
गंगानुस

आप इस प्रश्न को माइग्रेट करने के लिए एक प्रश्न पूछ सकते हैं, बजाय इसके कि क्यूशन को दोहराते हुए। यहाँ programmersप्रश्नों पर अधिक विवादास्पद प्रश्न हैं "आप क्या सोचते हैं ../ यह अच्छा है या बुरा ..." जबकि stackoverflowअधिक होगा जैसे "एंड्रॉइड में एमवीपी के उदाहरण हैं"। मेरे लिए दोनों जगह ठीक हैं।
k3b

मुझे अपनी जल्दबाजी के लिए बहुत खेद है, लेकिन अब तक मुझे प्रवेश से जुड़ने का कोई तरीका नहीं मिला है :-(
Gangnus

यह सवाल स्टैक ओवरफ्लो के लिए उपयुक्त नहीं है । BTW - आप "ध्वज" लिंक का उपयोग करके अपने पोस्ट को फ़्लैग करके मध्यस्थों से संपर्क कर सकते हैं।
ChrisF

जवाबों:


15

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

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

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


+1! कृपया, क्या आप इस पर कुछ अच्छे ग्रंथों का संदर्भ या दो दे सकते हैं?
गंगानुस

4
मुझे लगा कि एमवीपी आपको Action(= प्रस्तुति) परत मंच को स्वतंत्र रखने का अवसर प्रदान करता है , वह भी कम से कम, जब आपके विभिन्न प्लेटफ़ॉर्म यूआई क्षमताओं की पेशकश करते हैं।
डॉक्टर ब्राउन

@DocBrown सिद्धांत रूप में, हाँ। व्यवहार में मुझे यकीन नहीं है कि यह कभी भी संभव होगा, क्योंकि उपयोगकर्ता इंटरैक्शन दृश्य या प्रस्तुतकर्ता को हिट कर सकता है। उदाहरण के लिए, एंड्रॉइड में पाइप्स को गतिविधि द्वारा नियंत्रित किया जाता है, लेकिन वेब पेजों को दृश्य (ब्राउज़र) द्वारा नियंत्रित किया जाएगा।
माइकल के

12
"एंड्रॉइड एप्लिकेशन मूल रूप से मॉडल-व्यू-कंट्रोलर के आसपास निर्मित होते हैं" - यह इतने सारे स्तरों पर गलत है, मुझे क्षमा करें। एंड्रॉइड फ्रेमवर्क आर्किटेक्चर भगवान कक्षाओं के आसपास बनाया गया है जहां व्यू / कंट्रोलर लॉजिक को क्लैट किया जाता है।
इगोर फिलिप्पोव

2
मेरी इच्छा है कि मैं इगोरफिलिपोव की टिप्पणी को केवल एक बार से ज्यादा बढ़ा सकूं। यह विचार कि Android ऐप्स MVC को डिज़ाइन द्वारा कार्यान्वित करते हैं, एक सामान्य गलत धारणा है। IOS के विपरीत कोई GUI आर्किटेक्चर Android द्वारा चिंताओं के स्पष्ट पृथक्करण और एक पृथक, आसानी से परीक्षण योग्य मॉडल के लिए अनुमति देने के लिए लागू नहीं किया गया है। आपको स्वयं एक प्रदान करना होगा, यह एमवीपी, एमवीसी या कुछ और हो सकता है।
Piovezan

6

मुझे एंड्रॉइड प्रोग्रामिंग पर कोई अनुभव नहीं है, लेकिन कुछ परिचयात्मक एंड्रॉइड प्रोग्रामिंग ट्यूटोरियल में संक्षिप्त रूप से देखने का एक कारण यह नहीं है कि एमवीपी किसी अन्य घटना संचालित ढांचे के रूप में कम उपयोगी क्यों होना चाहिए। Activityवर्ग से बहुत अलग नहीं है Dialogया Formतो यह आसान अपने आवेदन के किसी भी गतिविधि उपवर्ग के लिए एक "Activitity प्रस्तुतकर्ता" वर्ग बना सकते हैं और वहाँ कोर तर्क डाल करने के लिए होना चाहिए, अन्य चौखटे में।

आपके "गतिविधि" को भेजने वाली घटनाओं को आपके प्रस्तुतकर्ता को सौंप दिया जाना चाहिए, और यदि आपका प्रस्तुतकर्ता अपने दम पर घटनाओं को भेजने वाला है, या अन्य सिस्टम निर्भर सुविधाओं को कॉल करने के लिए जा रहा है, तो आपकी गतिविधि को प्रस्तुतकर्ता के साथ साझा किए गए इंटरफ़ेस के माध्यम से संबंधित कार्यों को प्रदान करना होगा। लेकिन यह मूल रूप से किसी भी अन्य जीयूआई ढांचे के रूप में ही है जो मुझे पता है।


आप समय के लिए धन्यवाद। लेकिन जैसा कि आप एक अन्य उत्तर से देखते हैं, एंड्रॉइड में समान मॉडल का उपयोग किया जाता है। "मैं 50 साल तक गद्य बोलता रहा और इसके बारे में नहीं जानता था!" अब मैं मॉडलों के अंतर को देखने की कोशिश करूंगा।
गंगानुस

4
@ गैंग्नस: एमवीपी एमवीसी का एक विशेष रूप है, यहां कोडबेटेर / ​​जेमेरिमिलर/2007/07/26/ ... आपको अधिक जानकारी मिलती है। और मुझे पूरा यकीन है कि यह "MVC या MVP" का सवाल नहीं है। गतिविधियाँ "नियंत्रक" का एक रूप हो सकती हैं, लेकिन वे मंच पर निर्भर हैं। प्रत्येक गतिविधि के लिए एक स्वतंत्र स्वतंत्र प्रस्तुतकर्ता वर्ग के लिए यूआई लॉजिक को अलग करना संभवतः उन्हें आसान इकाई-परीक्षण योग्य और अधिक पोर्टेबल बना देगा।
डॉक्टर ब्राउन

5

एमवीपी निश्चित रूप से एंड्रॉइड के लिए उपयोगी है। यह आपके कोड को व्यवस्थित और इकाई परीक्षण में मदद करता है। और सबसे अच्छा हिस्सा नए लोग हैं जो आपके कोड को पढ़ रहे हैं, कोड को समझने में सक्षम होंगे और जैसे ही उन्हें पता चलेगा कि उन्हें कहां जाना चाहिए। यहां उदाहरणों के साथ MVP को समझने के लिए एक बहुत ही उपयोगी लिंक है ।

यहां एमवीपी के सभी तीन घटकों का संक्षिप्त विवरण दिया गया है

राय

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

प्रस्तुतकर्ता

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

यदि आप प्रस्तुतकर्ता में डेटाबेस का उपयोग करना चाहते हैं तो गतिविधि एक डेटाबेस उदाहरण बनाएं और इसे प्रस्तुतकर्ता में इंजेक्ट करें। यह यूनिट परीक्षण के दौरान डेटाबेस का मजाक उड़ाने में आपकी मदद करेगा और आपको व्यावसायिक तर्क का परीक्षण करने में सक्षम करेगा।

आदर्श

एमवीपी में मॉडल आपके डेटा स्रोत के अलावा कुछ नहीं है। दृश्य इसके बजाय सीधे डेटा से बात नहीं करता है, यह प्रस्तुतकर्ता को इसके लिए डेटा को संभालने के लिए आदेश देता है और वह जानकारी वापस देता है जिसे बिना किसी और संशोधन के प्रदर्शित किया जा सकता है।


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

@Gangnus मैंने उत्तर में आवश्यक जानकारी प्रदान की है क्योंकि सभी सामग्री डालने से उत्तर बहुत बड़ा हो जाएगा।
अजीत सिंह

1
वास्तव में एमवीपी दो प्रकार के होते हैं। पैसिव व्यू (जो आपने यहां वर्णित किया है) और सुपरवाइजिंग प्रस्तोता, जो मॉडल को दृश्य के प्रत्यक्ष डेटाबाइंडिंग (बहुत MVVM और कई वेब MVC फ्रेमवर्क की तरह) की अनुमति देता है।
रबड़डक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.