2012-03-18 17 views
18

एमवीपी का उपयोग करते समय प्रस्तुतियों के बीच संचार को संभालने के बारे में मेरा एक प्रश्न है। कहो मेरे पास दो एमवीपी-ट्रायड्स हैं। एक उत्पादों की एक सूची है (ट्रायड ए) और दूसरा वर्तमान में चयनित उत्पाद (ट्रायड बी) के बारे में कुछ सामान्य जानकारी है।एमवीपी संचार?

मैं प्रेजेंटर बी को कैसे बता सकता हूं कि इसे अपडेट करने की आवश्यकता है क्योंकि चयनित उत्पाद ए द्वारा बदला गया है? मैं निश्चित रूप से ऐसा करने के तरीकों के बारे में सोच सकता हूं, लेकिन मैं सोच रहा था कि इसे संभालने के लिए एक सामान्य सम्मेलन है या नहीं।

किसी भी विचार के लिए अग्रिम धन्यवाद!

उत्तर

12

पैटर्न स्वयं वास्तव में यह निर्धारित करने के लिए निर्धारित नहीं करता है कि इसे कैसे संभालना है।

मेरी अपनी पसंद एक संदेश/घटना केंद्र है जहां प्रस्तुतकर्ता कुछ घटनाओं में रुचि पंजीकृत कर सकते हैं। यह जटिल निर्भरता पेड़ों को रोकता है और प्रस्तुतकर्ताओं को टेस्टेबल रखता है।

उदाहरण के लिए:

class PresenterA 
{ 
    void HandleProductSelectionChanged(int productId) 
    { 
     EventHub.Publish(EventType.ProductChanged, productId); 
    } 
} 

class PresenterB 
{ 
    void PresenterB 
    { 
     EventHub.Register(EventType.ProductChanged, HandleProductChanged); 
    } 

    public void HandleProductChanged(object state) 
    { 
     var productId = (int)state; 
     var productDetails = LoadProductDetails(productId); 
     view.DisplayProductDetails(productDetails); 
    } 
} 

EventHub प्रत्येक घटना के प्रकार के लिए आह्वान करने के लिए ग्राहकों की एक सूची रखना होगा।

आप अपनी टेस्टेबिलिटी बरकरार रखते हैं - यह देखने के लिए कि प्रेजेंटरबी एक नए उत्पाद चयन का जवाब कैसे देगा, बस HandleProductChanged पर कॉल करें।

एकमात्र नुकसान (किसी भी पैटर्न के साथ) क्या आप एक स्तर का संकेत प्रस्तुत करते हैं। अगर प्रेजेंटरए ने सीधे प्रेजेंटरबी का आह्वान किया, या प्रेजेंटरबी ने प्रेजेंटर ए पर एक ईवेंट की बात सुनी, तो यह तुरंत स्पष्ट हो रहा है कि क्या होने जा रहा है।

इस दृष्टिकोण में, आपके पास EventType.ProductChanged को देखने का अतिरिक्त चरण होगा, और उसके बाद उस प्रेजेंटर्स ने उस ईवेंट में रुचि दर्ज की है।

अपने अनुभव में, संकेत का एक स्तर स्तर मॉड्यूलरिटी के बराबर है।

+1

यह वही है जो मैं खोज रहा था, प्रस्तुतकर्ता संदर्भों को पारित करने से काफी बेहतर दिखता है। मैं कल इस पर एक नज़र डालूंगा जब मैं थक गया नहीं हूं। धन्यवाद। – user1277327

1

निजी तौर पर मैं जिस तरह से बहुत से लोगों को समस्याओं

यह मुझे एक मामले की कल्पना करना के लिए जब दो प्रस्तुतकर्ताओं एक दूसरे को संवाद करने की जरूरत है, आप एक वास्तविक मामले प्रदान कर सकते हैं मुश्किल है इस तरह का हल करने के लिए घटना बस चुनें असहमत हैं?

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

यह भी विचार करें कि यदि आप सही तरीके से सहयोगियों का उपयोग करते हैं तो आपको प्रस्तुतकर्ताओं के बीच संचार की आवश्यकता नहीं है। डेटा सहयोगियों द्वारा प्रदान किया जाना चाहिए।

+0

नमस्ते, क्या आप कुछ प्रकाश डाल सकते हैं कि मॉडल को प्रस्तुतकर्ता से कैसे संवाद करना चाहिए ताकि प्रस्तुतकर्ता कुछ क्रियाओं को देख सके। उदाहरण के लिए, कहें, मॉडल पढ़ने के बाद मॉडल में किया जाता है, मॉडल को प्रस्तुतकर्ता को कैसे बताया जाना चाहिए कि उसने डेटा पढ़ा है और डेटा को प्रस्तुतकर्ता को वापस भेज दिया है ताकि प्रस्तुतकर्ता दृश्य अपडेट कर सके। – eRaisedToX

+0

"डेटाबेस में डेटाबेस पढ़ा जाता है" ... naat XD ... मैं एक इंटरैक्टर बनाना पसंद करूंगा। –

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