2013-02-12 58 views
6

में इवेंट बस के लिए प्रेरणा मैं जीडब्ल्यूटी में एक एमवीपी जैसी एप्लिकेशन बना रहा हूं।जीडब्ल्यूटी

  • कई पैनल हैं, और प्रत्येक व्यक्ति हर समय दिखाई देता है।
  • प्रत्येक पैनल में एक प्रेजेंटर होता है, और एक एकल ऐप कंट्रोलर होता है जो सभी प्रस्तुतकर्ताओं के ऊपर बैठता है।
  • कुछ एप्लिकेशन-स्तरीय घटनाएं हैं जो एक प्रस्तुतकर्ता के भीतर उत्पन्न होती हैं लेकिन अन्य प्रस्तुतियों के लिए प्रभाव पड़ती हैं।
  • इसके लिए सुझाए गए आर्किटेक्चर में इवेंट बस शामिल है। हालांकि, मुझे यकीन नहीं है कि मैं कुछ आसान पर लाभ देखता हूं।
  • विशेष रूप से, क्या यह किसी भी प्रेजेंटर से ईवेंट की सदस्यता लेने के लिए केवल AppController (और केवल AppController) को अनुमति देने के लिए क्लीनर नहीं होगा? ऐप कंट्रोलर घटना के बाद प्रत्येक प्रस्तुतकर्ता को क्या करना है, बता सकता है।
  • "इवेंट बस" एक अर्ध-वैश्विक चर की तरह दिखता है। लेकिन यदि आप एक ही चीज़ को अधिक सटीक परिभाषित तरीकों से पूरा कर सकते हैं (यानी वे विधियां जो प्रत्येक प्रेजेंटर पर ऐप कंट्रोलर कॉल करती हैं) क्या यह बेहतर नहीं है?

अधिक सटीक मेरी चिंता का विषय चुनने के लिए: क्यों बस घटनाओं उचित निर्णय लेने के स्तर तक दे "बुलबुला अप" की तुलना में बिल्कुल एक घटना बस पेश करते हैं, बल्कि? मेरे लिए यह एमवीपी अवधारणा के सबसे सरल विस्तार की तरह लगता है, और इसे इवेंट बस के नए विचार की आवश्यकता नहीं है। मुझे समझ में नहीं आता कि इवेंट बस को हल करने के लिए किस समस्या को पेश किया गया था।

+0

मुझे एमवीपी भ्रमित करने के लिए जीडब्ल्यूटी दस्तावेज मिला। आप इसे यहां पा सकते हैं - https://developers.google.com/web-toolkit/articles/mvp-architecture – SSR

+0

एसएसआर - धन्यवाद। मैंने इस दस्तावेज़ीकरण को पढ़ा लेकिन दिलचस्प बात यह है कि उस दस्तावेज़ में ईवेंट बस के लिए कोई वास्तविक प्रेरणा नहीं दी गई है।यह सिर्फ कहता है "आप एक इवेंट बस पर भरोसा करना चाहते हैं" जो वास्तव में चीजों को स्पष्ट नहीं करता है। –

उत्तर

8

इवेंटबस का लाभ कोड को अलग करना है।

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

मेरी राय में, कोड को साफ और आसानी से समझने के लिए इवेंटबस वास्तव में अच्छी बात है।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। जब आप कहते हैं कि विकल्प "प्रेषक बनाना" है, तो मैं आप जो कह रहा हूं उसके बारे में थोड़ा अस्पष्ट हूं। क्या आपका मतलब प्रत्येक प्रेजेंटर के अंदर एक प्रेषक है, जो अन्य सभी (सब्सक्राइब किए गए) प्रस्तुतकर्ताओं के बारे में जानना चाहिए? मैं मानता हूं कि बुरा लगता है। इसके बजाए, मेरा मतलब यह है कि ऐप कंट्रोलर को एप्लिकेशन इवेंट प्राप्त होते हैं और फिर प्रेजेंटर्स को ** ** ** चीजें (प्रस्तुतकर्ताओं में परिभाषित सार्वजनिक विधियों का उपयोग करके) को बताते हैं। इस योजना में, प्रस्तुतकर्ता अन्य प्रस्तुतियों की घटनाओं को नहीं सुनते हैं। क्षमा करें अगर मुझे कुछ याद आ रहा है ... –

+1

यदि आपके पास केवल कुछ प्रस्तुतकर्ता हैं, तो यह दृष्टिकोण काम करेगा। लेकिन अगर आप बड़े पैमाने पर सोचते हैं, तो 20 से 100 प्रस्तुतकर्ता कहें, आपको इस एकल ऐप कंट्रोलर में ज्यादा तर्क देना होगा। असल में इस एकल वर्ग को सभी प्रस्तुतकर्ताओं को जानना आवश्यक है और वहां घटनाओं को प्रेषित करना है। यदि आप किसी प्रस्तुतकर्ता को एक कस्टम ईवेंट जोड़ते हैं, तो आपको अपना ऐप कंट्रोलर भी अपडेट करना होगा। –

+0

ठीक है, यह एक बहुत अच्छा कारण की तरह लगता है। स्पष्टीकरण के लिए धन्यवाद। –

3

आपका प्रस्तावित दृष्टिकोण ठीक है, एक बड़ी कमी के साथ: जब आपका ऐप बढ़ता है तो यह स्पेगेटी कोड की मांग करता है।

This presentation एंड्रॉइड के बारे में है लेकिन तर्क भी जीडब्ल्यूटी के लिए है।

गूगल मैं/हे 2009 जो स्पष्ट स्पेगेटी कोड (एक चाहिए-घड़ी अगर आप पहले से ही नहीं है) से लड़ने के लिए के बारे में उपयोग एक घटना बस में बात करती है से भी देखें this famous presentation

अंत में, साथ this blog post सौदों पर्यवेक्षक बनाम मध्यस्थ जे एस में पैटर्न: GWT में, पर्यवेक्षक पैटर्न ईवेंट हैंडलर्स से महसूस किया है, जबकि मध्यस्थ पैटर्न घटना बस से महसूस किया है। यहां टीएल है; डॉ: «घटक के अंदर पर्यवेक्षक" स्थानीय रूप से ", घटक के बीच मध्यस्थ" दूरस्थ रूप से "मध्यस्थ का उपयोग करें। »

+0

धन्यवाद, यह सहायक है। हालांकि, कम से कम Google I/O प्रस्तुति के पीडीएफ संस्करण में (मैं इथियोपिया में हूं इसलिए मेरे पास वीडियो देखने के लिए बैंडविड्थ नहीं है) ऐसा प्रतीत होता है कि इवेंट बस का वर्णित विकल्प प्रत्यक्ष प्रस्तुतकर्ता-टू- प्रस्तुतकर्ता संचार, जो मैं सहमत हूं, स्पेगेटी-जैसी बन जाता है। जो मैं वर्णन करने की कोशिश कर रहा हूं वह काफी नहीं है - बल्कि यह एक ऐसी स्थिति है जहां एक दूसरे से प्रेजेंटर्स को छुपाने के लिए अभी भी "मध्यस्थ" या "दलाल" है, लेकिन मध्यस्थ तर्क (ऐपकंट्रोलर) का एक टुकड़ा है जो बैठता है सभी प्रस्तुतकर्ताओं के "शीर्ष पर"। –