आपने शायद यह Google I/O प्रस्तुति देखी है: Google Web Toolkit Architecture: Best Practices For Architecting Your GWT App।
इसमें बड़ी जीडब्ल्यूटी परियोजनाओं के साथ काम करने के लिए स्वच्छ तकनीकों को शामिल किया गया है, जैसे आरपीसी कॉल के लिए कमांड पैटर्न, एमवीपी पैटर्न, निर्भरता इंजेक्शन, और इवेंटबस पैटर्न का उपयोग करके डीक्यूप्लिंग घटक का उपयोग करना। अब वहाँ कई GWT चौखटे है कि इन पैटर्न लागू, (gwt-प्रेषण कमान पैटर्न के लिए, एमवीपी के लिए gwt-प्रस्तोता और gwt-मंच, जिन डि के लिए & Guice) हैं, लेकिन बात मैं के बारे में की तरह इवेंटबस अवधारणा यह है कि यह कोर जीडब्ल्यूटी फ्रेमवर्क (HandlerManager
) का हिस्सा है, इसलिए मुझे छोटी जीडब्ल्यूटी परियोजनाओं में अतिरिक्त निर्भरताओं को जोड़ने की ज़रूरत नहीं है।
मुझे लगता है कि EventBus अवधारणा अर्थ है कि आप देखें घटकों प्रस्तुतकर्ता घटकों उन कार्यों के बारे में सूचित करने की आवश्यकता है से उपयोगकर्ता इनपुट प्राप्त करने की ज़िम्मेदारी decoupling कर रहे हैं में ऑब्जर्वर डिजाइन पैटर्न से संबंधित है। मुद्दा यह है कि आपकी लिस्टबॉक्स चीज़ को अपने राज्य में बदलाव में रुचि रखने वाले सभी घटकों के बारे में नहीं पता है, यह सिर्फ इवेंटबस को एक घटना को आग लगती है, और इच्छुक घटक उस घटना और कार्य को प्राप्त करेंगे, हालांकि वे चाहते हैं।
मुझे नहीं लगता कि आपको हमेशा हैंडलर प्रबंधक उदाहरण के माध्यम से चीजें करना है। मान लें कि आपके पास कस्टम DateRangePicker
विजेट है, जो उपयोगकर्ताओं को कस्टम दिनांक सीमा चुनने देता है। जब भी कोई तिथि सीमा उठाया जाता है, विजेट अपने onSomethingChanged()
विधि में कुछ इस तरह कर सकते हैं:
NativeEvent event = Document.get().createChangeEvent();
DomEvent.fireNativeEvent(event, this);
तब घटकों दिनांक सीमा का चयन परिवर्तन में रुचि रखने वाले सिर्फ DateRangePicker विजेट उदाहरणों को हाथ के बल्लेबाज कॉलबैक रजिस्टर कर सकते हैं।
dateRangePicker.addDomHandler(new ChangeHandler(){
@Override
public void onChange(ChangeEvent event) {
refresh();
}
}, ChangeEvent.getType());
मुझे लगता है कि यह एक अच्छा शिथिल युग्मित डिजाइन है और यह एक HandlerManager
उदाहरण का उपयोग नहीं करता।
एक खराब डिज़ाइन किसी घटना को फायर करने की बजाय DateRangePicker की SomingChange() विधि में सभी रुचि घटक के refresh()
विधियों को कॉल करना होगा। (या इससे भी बदतर: सभी रीफ्रेश() - एसएस, डेटरेंज पिकर ऑब्जेक्ट के सबकंपोनेंट की ऑनमिंग चेंज() विधियों को कॉल करना।)
सब कुछ ओवरड्यूड किया जा सकता है :-) – jabal