2016-03-02 3 views
31

एक इंटैक्टर क्या है? यह एमवीपी डिजाइन के भीतर कैसे फिट है? प्रस्तुतकर्ता में इंटरैक्टर कोड डालकर एक इंटरैक्टर का उपयोग करने के फायदे/नुकसान क्या हैं?एंड्रॉइड एमवीपी: एक इंटैक्टर क्या है?

उत्तर

62

एमवीपी भगवान गतिविधि समस्या (वैसे बहुत सारी पंक्तियां हैं कि एक गतिविधि/टुकड़ा) से निपटने के लिए मौजूद है बनाया है।

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

आप अपने "मॉडल/नियंत्रक" के रूप में एक इंटरैक्टर के बारे में सोच सकते हैं। एक इंटरैक्टर आपके डेटाबेस, वेब सेवाओं या किसी अन्य डेटा स्रोत से डेटा लाएगा। डेटा प्राप्त करने के बाद, इंटरैक्टर डेटा को प्रस्तुतकर्ता को भेज देगा। इस प्रकार, आपके यूआई में बदलाव करना।

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

अद्यतन: बेशक यह सिर्फ है एक से अधिक सरलीकरण, अगर आप बेहतर जानकारी के लिए चाहते हैं आप देख सकते हैं fernando cejas blog या antonio leiva blog

+0

एक स्पष्ट उत्तर। क्या यह आरएक्सजेवा के साथ इंटरैक्टर्स को प्रतिस्थापित करने के लिए व्यवहार्य या बेहतर है? –

+1

@JiaqiLiu यह संभव है, लेकिन हमेशा नहीं (या बेहतर)। इंटरएक्टर का उपयोग करने के लिए आपको आरएक्सजेवा की आवश्यकता नहीं है। किसी अन्य पुस्तकालय की तरह, आरएक्सजेवा सिर्फ एक उपकरण है। अपनी आवश्यकताओं के अनुरूप सर्वोत्तम टूल ढूंढें। यदि आपके पास बहुत सी मुद्राएं हैं तो आरएक्सजेवा का उपयोग करें। – aldok

6

इंटरैक्टर में एप्लिकेशन के उपयोग-मामले शामिल हैं, जिसका अर्थ है कि इसमें परियोजना के व्यावसायिक डोमेन के लिए सभी कार्यान्वयन होंगे।

यहां Architecturing Android Applications, using the MVP pattern. पर एक बहुत ही व्यवस्थित लेख है, जिसे मैं अत्यधिक अध्ययन करने की सलाह देता हूं।

इसके अलावा, मैं JuicyInsta कहा जाता है एक Android एप्लिकेशन, एमवीपी पैटर्न और Instagram एपीआई का उपयोग कर, which is shared here on github.

+1

यह करता है मुझे स्पष्ट नहीं लगता है। उस लेख को पढ़ना वास्तव में इस सवाल को प्रेरित करता है - "व्यापार डोमेन के लिए कार्यान्वयन" का मतलब आम आदमी के नियमों में क्या है? – bkach

+0

मेरी समझ में @bkach एक इंटरफ़ेस है जो परिभाषित करता है कि व्यापार क्या करेगा उदाहरण के लिए बैंक, आप निम्न विधि जैसे, निकासी, स्थानांतरण, जमा आदि के साथ एक इंटरफेस तैयार करेंगे। अब आप इस इंटरफ़ेस का कार्यान्वयन कर सकते हैं क्लाइंट के आधार पर कहें? या जैसा कि व्यापार नियम द्वारा निर्धारित किया गया है। लेकिन मुझसे गलती हो सकती है। –

2

व्यक्तिगत तौर पर मैं का उपयोग देखें, वर्तमान और Interactor कि मेरे लिए मॉडल से अलग है।

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

ईजी। आपके पास एक LoginInteractor हो सकता है जो उपयोगकर्ता को प्रमाणीकृत करने के लिए एक Asynctask बनाता है और फिर प्राप्त डेटा के साथ UserModel पॉप्युलेट।

5

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

तो इंटरएक्टर प्रेजेंटर/व्यू मॉडेल और रिपोजिटरी पैटर्न के बीच मध्यस्थ है।

मैंने एमवीपी में इंटरैक्टर पैटर्न का उपयोग नहीं किया है, मैंने इसे एमवीवीएम में उपयोग किया है। इंटरैक्टर्स को उपयोग के लिए एक दूसरे के लिए इस्तेमाल किया जा सकता है।

उदाहरण के लिए, सूची में दिखाने के लिए श्रेणियों को लाने के मामले का उपयोग करें।

  • देखें (गतिविधि/टुकड़ा) श्रेणीसूची प्राप्त करने के लिए प्रेजेंटर/व्यूमोडेल की विधि को कॉल करेगा।
  • फिर प्रस्तोता categoryList पाने के लिए
  • Interactor categoryList पाने के लिए भंडार का (CategoryRepository) विधि कॉल करेंगे
  • भंडार वेब सेवा से श्रेणियों (रिमोट डेटा स्रोत) लाने के लिए तय करने के लिए तर्क होगा या डीबी से interactor की विधि कॉल करेंगे भंडारण (स्थानीय डेटा स्रोत) या कैश से (अस्थायी भंडारण - रिपोजिटरी कक्षा में परिवर्तनीय हो सकता है)।
  • रिपोजिटरी श्रेणी सूची (चयनित डेटा स्रोत से प्राप्त) को इंटरैक्टर
  • इंटरैक्टर या तो श्रेणीसूची (कुछ स्वरूपण इत्यादि) पर प्रक्रिया करेगा और इसे प्रस्तुतकर्ता को भेज देगा। Interactor सीधे प्रस्तुतकर्ता को सूची भेज सकते हैं अगर कोई प्रसंस्करण की जरूरत है
  • प्रस्तुतकर्ता दृश्य की विधि categoryList साथ पैरामीटर के रूप में फोन करेगा
  • दृश्य के साथ या बिना एनीमेशन categoryList दिखाएगा

ध्यान दें कि यह प्रक्रिया Interactor में बचा जा सकता है इसलिए इस रिपोजिटरी-> इंटरैक्टर-> प्रस्तुतकर्ता जैसे डेटा प्रवाह का उपयोग करने के बजाय, संचार रिपोजिटरी-> प्रस्तुतकर्ता द्वारा किया जा सकता है। यहां प्रस्तुतकर्ता प्रस्तुति/डोमेन परत का भी हिस्सा होगा। जैसे मैंने कहा कि इंटरैक्टर इन दो परतों के विभाजक के रूप में कार्य करता है।

ये कुछ संक्षेप में लिखित संदर्भ

मुझे आशा है कि यह बेहतर में Interactor की समझ भूमिका में मदद मिलेगी के लिए इस अवधारणा को समझाने के लिए ब्लॉग हैं रास्ता

संबंधित मुद्दे