2012-10-06 11 views
30

मैं वर्तमान में तीन वैडिन अनुप्रयोगों पर काम कर रहा हूं और मुझे लगता है कि मुझे कुछ याद आ रहा है। मैं पहले स्प्रिंग एमवीसी के साथ काम करता था, जहां वास्तुकला स्पष्ट और decoupled है, आप नियंत्रकों के लिए सेवाओं इंजेक्षन और यूआई के लिए जोड़े नियंत्रक नहीं है और इसी तरह।वाडिन: डिजाइन पैटर्न

अब वाडिन में यह अलग कहानी है।

प्रश्न 1::

  • यह सीधे UI घटक को सेवाएं (या DAOs) इंजेक्षन करने के लिए ठीक है तो अगर कोई Vaadin विशेषज्ञों सारे हैं, मैं आपको कुछ सवाल पूछ जाने?
  • उदाहरण: ईमेल एप्लिकेशन में संपर्क दिखाने के लिए जिम्मेदार घटक (लिंक के साथ वर्टिकललाइट पर आधारित ContactWidget) संपर्कों को प्रदर्शित करने की आवश्यकता है। क्या यह यूआई तत्व सीधे संपर्क रिपोजिटरी इंजेक्ट करना ठीक है?

प्रश्न 2: मुख्य आवेदन करने के लिए

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

प्रश्न 3: यूआई घटकों के बीच

  • निर्भरता बहुत जंगली मिल सकती है। शायद यहां कुछ भी करने के लिए कुछ भी नहीं है, लेकिन कभी-कभी ऐसा लगता है कि यह विंडो इस सूची पर निर्भर करती है जो उस पॉपअप पर निर्भर करती है ... आपको यह विचार मिलता है, यह मुझे कसकर जोड़ता है

मैं चाहता था मेरे कोड स्पेगेटी पर जाने से पहले वैडिन के साथ अच्छे डिजाइन के बारे में जितना संभव हो सके सीखना पसंद है, इसलिए किसी भी सुझाव, अनुभव और सर्वोत्तम प्रथाओं की सराहना की जाएगी।

उत्तर

15

हमारे पास एमवीवीएम पैटर्न (उर्फ Fowler's PresentationModel) का उपयोग करके बहुत अच्छी किस्मत है। उनके दस्तावेज़ थोड़ा पुराने हैं, लेकिन एक अच्छा प्रारंभिक बिंदु है।

के बाद आप पढ़ा है अपने जवाब अधिक भावना

  1. सं अपने ViewModel में अपनी सेवाओं को सम्मिलित करें कर सकते हैं कि,। व्यूमोडेल एक फेकाडे होगा (और एडाप्टर, सजावटी, कैश और आपके द्वारा तय किए जाने वाले किसी भी अन्य पैटर्न को एन्सेप्लेट कर सकता है)

  2. मुझे यहां कोई प्रश्न नहीं मिला, लेकिन हमारे पास ऐसी स्थिति है जो आप हैं वर्णन। हम decoupled घटकों के बीच संवाद करने के लिए Guava के EventBus का उपयोग करें।इस तरह, यदि आपको एक नई विंडो पॉप अप करने की आवश्यकता है, तो आप यह कर सकते हैं: eventBus.post(new NewWindowRequest(theComponent)) और आपका मुख्य एप्लिकेशन उसी ईवेंट में सब्सक्राइब किया जा सकता है, फिर विंडो को पॉप अप करें।

  3. एमवीवीएम और इवेंटबस का सतर्क उपयोग मदद कर सकता है। इसके अलावा, वाडिन के बीन इटिम और ऑब्जेक्टप्रोपर्टी का उपयोग परिवर्तनों को प्रसारित करने के लिए किया जा सकता है, क्योंकि वे वाडिन के अंतर्निर्मित पर्यवेक्षक/डेटा-बाध्यकारी पैटर्न का हिस्सा हैं।

मैंने हाल ही में presentation on MVC vs MVP vs MVVM किया था। उदाहरण कोड आपको एमवीसी से एमवीवीएम में बदलाव को समझने में मदद कर सकता है। यह जावास्क्रिप्ट में लिखा गया है, लेकिन यह इतना आसान है कि मेरा मानना ​​है कि अधिकांश लोग इसका अनुसरण कर सकते हैं। मैं आपके पास होने वाली किसी भी प्रतिक्रिया का स्वागत करता हूं।

+0

Thanx डस्टी की कोशिश कर सकते थे। अंत में मैंने हाथ से बने एमवीपी (बहुत हल्का) और घटना का प्रचार किया जो गुवा के आयोजन के आधार पर हुआ। मैं इस फैसले से काफी खुश हूं, भले ही यह आश्चर्यजनक है कि वैदिन के लिए कोई ठोस एमवीपी ढांचा नहीं है (हालांकि बीटा/अल्फा/प्रयोग के दर्जनों हैं)। – Xorty

+0

हाँ, ठीक है, लंबे समय तक आसपास होने के बावजूद, अभियंता प्रेम को पाने के लिए यह काफी बड़ा नहीं है कि अन्य तकनीक मिलती है। इसका उपयोग करने वाले अधिकांश लोग उपलब्ध सबसे सरल समाधान की तलाश में हैं, या यदि आप हमारे जैसे हैं, तो हमारे पास जो कुछ भी कर रहे हैं, उसे दस्तावेज करने के लिए पर्याप्त समय नहीं है। हाथ से निर्मित एक बहुत अच्छी पसंद है। अवधारणाएं महत्वपूर्ण भूमिका हैं, और अधिकांश एमवीसी/एमवीपी/एमवीवीएम ढांचे सिर्फ यह सुनिश्चित करने के लिए हैं कि आप लाइनों में रंग रहे हैं। यदि आपके पास अनुशासन है, तो वे आमतौर पर आवश्यकता नहीं होती हैं। उत्तर के लिए –

9

वाडिन सॉफ्टवेयर का एक बड़ा टुकड़ा है और आपको निश्चित रूप से स्पेगेटी कोड के साथ समाप्त नहीं होना चाहिए। वैसे भी, सब कुछ आप पर निर्भर करता है।

उत्तर 1

नहीं, यह नहीं है। उपयोग किए जा रहे ढांचे के बावजूद तंग युग्मन खराब है। आपका उदाहरण (ContactWidget) एक सूची के कस्टम कार्यान्वयन का वर्णन करता है। इसे अतिरिक्त जानकारी के साथ या बिना टेबल के रूप में प्रस्तुत किया जा सकता है। मैं टेबल उदाहरण का उपयोग करूंगा क्योंकि यह अधिक जटिल और अधिक लचीला है (आप उन्नत तालिका घटक और उचित डेटा बाइंडिंग वाले पूरे एप्लिकेशन को बना सकते हैं)।

वाडिन प्रसिद्ध एमवीसी पैटर्न के बाद उन्नत डेटा मॉडल को परिभाषित करता है। तीन नेस्टेड परतें हैं: कंटेनर, आइटम, संपत्ति (गुण दर्शक और संपादक भी परिभाषित किए जाते हैं)। वाडिन पुस्तक अच्छी सादृश्य का सुझाव देती है: स्प्रेडशीट आवेदन। तो कंटेनर, आइटम और संपत्ति तालिका, पंक्ति और सेल के अनुरूप होगी। कल्पना करने में आसान - समझने में आसान। अंत में, ItemContainer इसकी प्रकृति को प्रकट करेगा और आप समझेंगे कि यह किसी भी अच्छे और लचीली वाडिन-आधारित वास्तुकला के लिए महत्वपूर्ण अनुबंध है। मैं Vaadin पुस्तक के माध्यम से देखने के लिए, अन्य सभी विवरण प्राप्त करने के लिए सुझाव है:

आप किसी भी PagedTable ऐड-ऑन के पीछे कंटेनर कार्यान्वयन की समीक्षा भी बेहतर समझ पाने के लिए कर सकते हैं। कृपया ArrayContainer https://vaadin.com/directory#addon/array-container से भी शुरू करें, यह आपके लिए बहुत आसान होगा।

उत्तर 2

मुख्य आवेदन संदर्भ पासिंग एक अच्छा समाधान हो प्रतीत नहीं होता है। आपने नोटिस किया था कि एप्लिकेशन इंस्टेंस सत्र का प्रतिनिधित्व करता है लेकिन आपके लिए कुछ प्रकार के सत्र कॉन्टेक्स्ट अनुबंध को परिभाषित करना बेहतर होगा (जिसे अभी भी आपके एप्लिकेशन द्वारा कार्यान्वित किया जा सकता है)। संबंधित सत्र कॉन्टेक्स्ट उदाहरण में पारदर्शी पहुंच प्रदान करने के लिए एक स्थिर विधि को परिभाषित किया जा सकता है। हुड के तहत यह थ्रेडलोकल चर http://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html का उपयोग कर सकता है इस तरह से आप गुजरने वाले सभी परजीवी मानकों से छुटकारा पायेंगे।

उत्तर 3

एक बड़ी सावधानी से अपने पदानुक्रम डिज़ाइन करें। खुद को पुनर्जीवित न करें, इसके बजाय Refresher का उपयोग करें। पूरे वास्तुकला पर नजर रखें।

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

के रूप में सुझाव देते हैं तो आप भी MVVM https://vaadin.com/directory#addon/bambi-mvvm

+1

Thanx, मैंने बाम्बी-एमवीवीएम की जांच की - बहुत अच्छा लग रहा है, लेकिन यह काफी अपूर्ण, अवांछित और बीटा है। अधिकांश एमवीवीएम/एमवीपी वाडिन से संबंधित सामानों के लिए मैंने पाया :( – Xorty

+0

आपका स्वागत है। वाडिन बहुत छोटा है, या अपेक्षाकृत युवा कहना बेहतर है :) व्यक्तिगत रूप से, मैं कंटेनर, कंटेनर को लागू करना पसंद करता हूं। इंडेक्स, ... खुद को पेजिंग और कुछ अन्य विशेषताएं प्राप्त करें। –

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