2010-01-20 8 views
35

मैं डेस्कटॉप एप्लिकेशन विकसित करने के लिए जावा प्रोजेक्ट शुरू करूंगा। प्रस्तुति परत पैटर्न (एमवीसी, एमवीपी, एमवीवीएम या ....) के रूप में क्या उपयोग करें?क्या उपयोग करें? एमवीसी, एमवीपी या एमवीवीएम या ...?

... अगर यह संभव है, कुछ काम कर छोटा सा उदाहरण के साथ ... :-)

+6

मुझे लगता है कि इस सवाल का बहुत अस्पष्ट है। आईएमई, हर कोई कहता है कि वे एमवीसी कर रहे हैं, लेकिन वे क्या कर रहे हैं शायद दूसरों में से एक का कुछ बदलाव है। – jsight

उत्तर

48

वास्तव में, परम पद आप देख रहे हैं this answerthis answerSwing Frameworks and Best PracticesSwing Frameworks and Best Practices सूत्र में कर्स्टन Lentzsch से (JGoodies फेम) है।

हैलो,

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

मैं कहूंगा कि ऑनलाइन उपलब्ध स्विंग के लिए कोई "सर्वोत्तम अभ्यास" नहीं है। और मुझे संदेह है कि कोई भी "सर्वोत्तम" प्रथाएं प्रदान कर सकता है, क्योंकि को स्विंग डेवलपर्स और समाधान प्रदाताओं के बीच दृष्टिकोणों के बारे में चर्चा की आवश्यकता है, जो तकनीकी रूप से अच्छी तरह से काम करता है और को समझना आसान है और साथ काम करता है। इसके अलावा, सर्वोत्तम अभ्यास बताएंगे कि कौन सा परिणाम गुणवत्ता प्राप्त कर सकता है, और वे उत्पादन समय और उत्पादन लागत का वर्णन करेंगे; लेकिन मुझे इन सूचनाओं को कभी भी ऑनलाइन या स्विंग पुस्तक में नहीं मिला।

मेरी राय में, अच्छी प्रथाओं और जानकारी की कमी बनाने के लिए कैसे एक स्विंग ऐप स्विंग से शुरू होने पर सबसे बड़ी बाधा डेवलपर्स का सामना करना पड़ता है। जिन डेवलपर्स के साथ मैंने काम किया था, वे डिजाइन ढूंढने में धीमे थे, लेआउट लागू करना, पैनल बनाना, बाध्यकारी डेटा, घटनाओं को संभालना, और विभिन्न कोड पार्ट्स और कोड परतों की व्यवस्था करना। और कई स्विंग ऐप्स मैंने चूसना देखा है; उनके खराब दृश्य डिजाइन के अलावा वे समझने में मुश्किल हैं और यहां तक ​​कि छोटे बदलावों की लागत बहुत अधिक है। आमतौर पर डेवलपर्स जहां क्या कोड डाल करने के लिए ?, चिंताओं को अलग करने के लिए कैसे ?, चीजों को एक साथ टाई करने के लिए कैसे ?, कैसे क्रियाओं के साथ काम करने के लिए ?, कैसे कोई एप्लिकेशन ?, शुरू करने के लिए कोई सुराग नहीं था और को संग्रह करने तथा यूआई राज्य बहाल करने के लिए ? अधिकांश डेवलपर्स का पालन करने के लिए दिशानिर्देशों की कमी है।

लेकिन मुझे पता चला है कि औसत डेवलपर स्विंग के साथ अच्छी तरह से काम कर सकता है, अगर केवल हाथ से लिया गया - लगभग 3 से 10 दिनों में।आपके लगभग प्रश्नों का उत्तर कोड, पुस्तकालयों, एप्लिकेशन आर्किटेक्चर, पैटर्न, सामान्य प्रोग्रामिंग प्रथाओं, अच्छी तरह से डिज़ाइन किए गए उदाहरण, ट्यूटोरियल आदि द्वारा उत्तर या संबोधित किया जा सकता है। मैं एक स्विंग विकास प्रक्रिया को पढ़ता हूं जो 3 के आसपास बनाया गया है -टेयर आर्किटेक्चर जो डोमेन, टूल और प्रेजेंटेशन परतों को अलग करता है और यह उत्पादक लेआउट सिस्टम पर आधारित है। हालांकि अधिकांश हिस्सों को प्रोग्रामेटिक रूप से डेवलपर्स को परिणाम मिलते हैं और कोड और विजुअल डिज़ाइन दोनों काफी संगत हो जाते हैं। यह डेवलपर की उत्पादकता को लॉट को बढ़ावा दे सकता है - इस हद तक कि स्विंग कार्य परियोजना के काम के अंश अंश लेता है।

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

फाउलर के पैटर्न को 3-क्लाइंट-स्तरीय आर्किटेक्चर के साथ जोड़ा जा सकता है जो मामूली बड़े स्विंग अनुप्रयोगों के लिए अच्छी तरह से स्केल करता है। इसमें डोमेन परत, 0 प्रस्तुति परत, और मध्यस्थ मॉडल परत के शामिल हैं। मैंने अपने डेटा बाध्यकारी प्रस्तुति में इस आर्किटेक्चर को रेखांकित किया है। एमवीपी-आधारित ऐप्स इन 3 क्लाइंट स्तरों में भी संरचित किए जा सकते हैं।

स्विंग अनुप्रयोगों के लिए एक महत्वपूर्ण कार्य डेटा बाध्यकारी है: डोमेन ऑब्जेक्ट्स और डोमेन ऑब्जेक्ट गुणों को स्विंग घटकों से कैसे कनेक्ट करें। असल में आप अपने डेटा को प्रतिलिपि बना सकते हैं, या यूजर घटकों से अपने डोमेन ऑब्जेक्ट्स के एडाप्टर की श्रृंखला बना सकते हैं। प्रतिलिपि को समझना आसान है और अक्सर उन के लिए पहली पसंद है जो स्विंग या डेटा बाइंडिंग के लिए नए हैं; मैं कहूंगा कि यह एक अच्छी पसंद है। दूसरी ओर, प्रतिलिपि बनाने से विचारों को सिंक्रनाइज़ करना अधिक कठिन हो जाता है। एडाप्टर चेन और स्वचालित या अर्द्ध स्वचालित अपडेट यूआई में डोमेन डेटा को बाध्य करने के लिए आवश्यक कोड की मात्रा को कम कर सकते हैं। नकारात्मकता यह है कि यह दृष्टिकोण समझना बहुत कठिन है। जैसा कि आपने बताया है, स्विंग एक पुन: प्रयोज्य और लचीली मॉडल के लिए कोई महान अमूर्तता प्रदान नहीं करता है जिसका प्रयोग फ़ील्ड को बांधने के लिए किया जा सकता है; दस्तावेज़ इंटरफ़ेस सामान्य डेटा पहुंच के लिए उपयुक्त नहीं है। स्ट्रिंग्स, बूलियन्स, संख्या, तिथि आदि

मैं: वहाँ है कि एक ValueModel इंटरफ़ेस है कि बस एकल महत्वपूर्ण डेटा के लिए एक, सामान्य शक्तिशाली है, और लचीला मॉडल जोड़ने के लिए करना है प्रदान उपलब्ध कुछ पुस्तकालय हैं मुझे एक स्विंग पुस्तक के बारे में पता नहीं है जो एक वास्तविक स्विंग एप्लिकेशन विकास प्रक्रिया बताता है। आदर्श रूप से ऐसी पुस्तक पैटर्न, आर्किटेक्चर, और ऊपर वर्णित डेटा बाइंडिंग तकनीकों को जोड़ती है और स्विंग में इसे कार्यान्वित करने का वर्णन करती है। वैसे भी, एक छोटे-छोटे अनुप्रयोग विकास प्रक्रिया के लिए 10-वर्षीय दस्तावेज़ है जो बस यही करता है।ओरेकल का जे क्लाइंट आर्किटेक्चर और प्रलेखन पूर्ण नहीं है लेकिन जावा डेवलपर्स के लिए पढ़ना आसान हो सकता है। मैं डेटा बाध्यकारी के बारे में एक प्रस्तुति प्रदान करता हूं जो कि फाउलर पैटर्न, 3-स्तरीय आर्किटेक्चर और इन पैटर्न के लिए स्विंग कार्यान्वयन और स्वचालित डेटा बाइंडिंग के बारे में है। मेरे बाइंडिंग लाइब्रेरी के ट्यूटोरियल स्रोत आपको एडाप्टर चेन और ValueModel इंटरफ़ेस से परिचित होने में सहायता कर सकते हैं। एमवीपी पैटर्न के लिए सबसे अच्छा प्रलेखन डॉल्फिन स्मॉलटॉक डॉक्स में पाया जा सकता है।

बार जब आप अपने वास्तुकला और डेस्कटॉप पैटर्न सेट चुना है, तो आप निम्नलिखित अधिक बुनियादी स्विंग कार्यों ध्यान देना चाहिए: 1) पेशेवर देखो & का एक सेट का चयन करके उपस्थिति में सुधार महसूस करता है अपने लक्ष्य मंच सेट के लिए उपयुक्त , 2) एक लेआउट सिस्टम चुनें जो आपको अच्छी तरह से डिज़ाइन और लगातार स्क्रीन बनाने में मदद करता है, 3) डेटा सत्यापन समाधान चुनें, और 4) हर रोज स्विंग कार्यों के लिए समाधानों का एक बैग लें। सूर्य की JDNC, Oracle की JClient/एडीएफ, स्प्रिंग आरसीपी, NetBeans मंच:

परियोजनाओं है कि एक स्विंग वास्तुकला, पता डेटा बाइंडिंग और ठेठ स्विंग कार्यों, उदाहरण के लिए रूपरेखा तैयार की एक जोड़ी रहे हैं। I स्विंग समाधानों का वाणिज्यिक सूट प्रदान करता है जो ओपन सोर्स जेजीडीज लाइब्रेरीज़ पर आधारित है और सभी सार्वजनिक JGoodies टूल और डेमो के लिए समाधान और स्रोत का एक बैग जोड़ता है। इन स्रोतों का उद्देश्य है जो ऊपर वर्णित सभी मुद्दों को एक साथ जोड़ना है।

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

एमवीसी पैटर्न के आविष्कारक समुदाय ने 1 99 3 के आसपास एप्लिकेशनमोडेल (अब प्रस्तुति मॉडल के रूप में जाना जाता है) पेश किया; एमवीपी थोड़ी देर बाद पीछा किया। मेरी राय में ये दो पैटर्न एमवीसी की तुलना में स्विंग के लिए उपयोगी हैं। हाल ही में पर्यावरण जो लाया गया था, बड़े दर्शकों के लिए प्रेजेंटेशन मॉडल पैटर्न एक नए आर्किटेक्चर पर चला गया: "पोलॉक"। इच्छुक पाठक यह देखने के लिए Google देख सकते हैं कि एडाप्टर श्रृंखला से अलग है जो अक्सर प्रेजेंटेशन मॉडल के साथ संयुक्त होते हैं।

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

उम्मीद है कि इससे मदद मिलती है।सादर, कर्स्टन Lentzsch

संदर्भ: फाउलर की आगे पैटर्न - http://martinfowler.com/eaaDev डाटा बाध्यकारी प्रस्तुति - http://www.jgoodies.com/articles/ स्मालटाक एप्लिकेशन देव प्रक्रिया - http://www.cincom.com/downloads/pdf/AppDevGuide.pdf एमवीपी पैटर्न प्रलेखन - http://www.object-arts.com/EducationCentre/Patterns/MVP.htm सूर्य की JDNC परियोजना घर - http://jdnc.dev.java.net/ Oracle की एडीएफ पूछे जाने वाले प्रश्न - http://www.oracle.com/technology/products/jdev/htdocs/905/adffaq_otn.html स्प्रिंग आरसीपी परियोजना घर - http://www.springframework.org/spring-rcp.html नेटबीन प्लेटफार्म घर - http://www.netbeans.org/products/platform/ जेजीडीज स्विंग सूट - http://www.jgoodies.com/products/index.html

यदि आप करस्टन और जेगुडीज नहीं जानते हैं, तो मेरा विश्वास करो, यह आदमी वास्तव में जानता है कि वह किस बारे में बात कर रहा है। मैं गर्मजोशी से उनके उत्तर और को संदर्भ के रूप में पोस्ट की गई सामग्री को ध्यान से पढ़ने की अनुशंसा करता हूं। अधिक विशेष रूप से, अपने डेस्कटॉप पैटर्न और डेटा बाध्यकारी प्रस्तुति की जांच करना सुनिश्चित करें। हैरानी की बात है, मैं old version को new one पर पसंद करता हूं।

दें मुझे MVC के बारे में अपने स्लाइड बोली एमवीपी बनाम:

  • हाँ, स्विंग का उपयोग करता है एक बढ़ाया MVC के प्रपत्र आंतरिक
  • लेकिन MVC घटकों के लिए है, एमवीपी अनुप्रयोगों के लिए है

और फिर सारांश से:

  • स्विंग बनाता Presentation Model आसान
  • अपराह्न एक बाध्यकारी समाधान

की आवश्यकता है लेकिन मैं इस समझा पर कर्स्टन से बेहतर कार्य नहीं कर सकता, मैं सबसे अच्छे रूप में उसे व्याख्या कर सकते हैं। तो बस उसे पढ़ें!

शायद Desktop Java demos for learning (अधिक सटीक स्कॉट व्हायोलेट के answer) पर एक नज़र डालें।

+1

यहां कुछ अपडेट किए गए लिंक दिए गए हैं: http://forums.java.net/node/651182 http://www.java.net/node/661990 –

+0

@ मिशैक्स ने इंटरनेट आर्काइव को इंगित करने के लिए लिंक अपडेट किए हैं (दान की सराहना की) और क्या जोड़ा है Karsten Lentzsch ने कहा। साल के उत्सव का मुबारक अंत :) –

0

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

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

मेरा 2 सेंट।

1

आप this article: Hello ZK MVVM पर एक नज़र डाल सकते हैं।जेडके एमवीपी और एमवीवीएम दोनों का समर्थन करता है, और यह आलेख आपकी पसंद के लिए कुछ अंतर्दृष्टि प्रदान कर सकता है - प्रोग्रामिंग मॉडल स्विंग के समान है, सोचा कि यह एक वेब ढांचा है।

3

यहाँ एक लेख जिसमें तीन जीयूआई पैटर्न तुलना में जावा में तीन बार एक ही स्क्रीन को लागू करने के लिए प्रयोग किया जाता है: विभिन्न चौखटे और भाषाओं लोग क्या महसूस एमवीपी, MVC है पर मामूली बदलाव है

Implementing event-driven GUI patterns using the ZK Java AJAX framework, Simon Massey, Sachin K Mahajan

के बाद से, एमवीवीएम और एमवीवीएमपी इत्यादि। लेख मार्टिन फाउलर द्वारा दिए गए लंबे नामों के पैटर्न को संदर्भित करने के लिए सावधान है, जो कि छोटे हाथों के एमआईसी मोनिकर्स नहीं हैं, जिनके बारे में बहस करना आसान है।

स्पष्ट रूप से जेडके एक वेब या मोबाइल डेस्कटॉप-जैसे प्रोग्रामिंग वातावरण है लेकिन पैटर्न स्विंग या किसी अन्य वसा ग्राहक ढांचे पर समान रूप से लागू होते हैं। हालांकि एक निश्चित डेस्कटॉप वातावरण के लिए एक अच्छा डाटाबेसिंग फ्रेमवर्क के बिना एमवीवीएम का प्रयास करना बहुत संभव नहीं है। इसलिए इस प्रारंभिक प्रस्तुति में "प्रस्तुति मॉडल" पैटर्न इसे "MVVM" के उपनाम एक विकल्प के रूप मॉडल-व्यू-बाइंडर के लिए "MVB" दिया जाता है:

Design Patterns in ZK: Java MVVM as Model-View-Binder, Simon Massey

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