2009-06-30 16 views
10

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

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

यह सबसे अच्छा होगा अगर यह आईडीई-स्वतंत्र होगा, लेकिन यदि ऐसी चीजें खेलती हैं, तो यह कहा जाना चाहिए कि समग्र परियोजना में, हम पहले ही ग्रहण, जेएफओआरडी डिजाइनर और जेजीडीज उपयोग में हैं।

मैं यह भी देखता हूं कि JSR296 मेरी चिंताओं को हल करने के लिए एक ढांचे को परिभाषित करता है। क्या मुझे बस ऐसा कुछ उपयोग करना चाहिए जो इसे लागू करता हो?

उत्तर

14

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

जेएसआर 2 9 6 एक उपयोगी प्रारंभिक स्थान है, लेकिन इसकी वास्तुकला में कुछ गंभीर समस्याएं हैं। मैं जेएसआर 2 9 6 का उपयोग करता हूं, लेकिन मेरे पास इसका अपना स्वाद है, और लगातार ढांचे के डिजाइन द्वारा पेश किए गए मुद्दों के आसपास काम करना है।

मैंने लंबे समय से सोचा है कि इस विषय पर एक चर्चा समूह/विकी/कुछ केंद्रित होना चाहिए। अब तक, मैंने उपयोगी समृद्ध क्लाइंट पुस्तकालयों के लिए सूचियों को उपयोगी पाया है, लेकिन व्यापक नहीं है। शायद शुरू करने के बारे में कुछ सोचने के लिए, मेरे खाली समय में :-)

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

सबसे पहले, कुछ बिल्कुल महत्वपूर्ण पुस्तकालयों यदि आप स्विंग विकास करने जा रहे हैं:

  1. बाइंडिंग - वहाँ है कि ऐसा करते हैं (JGoodies पुस्तकालयों के एक नंबर, JSR295 जो एक खुला स्रोत परियोजना में निकाला गया है बेहतर बीन्स बाइंडिंग (बीबीबी) कहा जाता है, ग्रहण बाध्यकारी ढांचे)। मैंने जेजीडीज का उपयोग करके कई साल पहले शुरुआत की थी, लेकिन मैं बीबीबी का उपयोग करने के लिए आगे बढ़ गया हूं क्योंकि मुझे लगता है कि यह अधिक सहज होने का दृष्टिकोण है। मैं घोषणात्मक कोडिंग दृष्टिकोण के फायदों पर दबाव नहीं डाल सकता जो बाध्यकारी के लिए अनुमति देता है - यह वास्तव में आपके कोड

  2. ऐपफ्रेमवर्क (या इसके कुछ स्वाद) - जेएसआर 2 9 6 यहां शुरू करने का स्थान है। जैसा कि मैंने ऊपर बताया है, इसमें कुछ समस्याएं हैं - यदि आप जेएसआर 2 9 6 का उपयोग करते हैं, तो मैं दृढ़ता से अनुशंसा करता हूं कि आप ढांचे के मूल में मौजूद सिंगलटन का उपयोग करने से बचने की कोशिश करें (फ्रेमवर्क घटकों के इंजेक्शन के स्रोत के अलावा आपको वास्तव में जरूरत है)।

संपादित - यह JSR 296 के रूप में जीवन शुरू किया था, लेकिन इसके साथ अब आम में बहुत कम है - के बाद से मैं यह लिखा है, मैं हमारी परियोजनाओं (यह एक Guice आधारित एप्लिकेशन रूपरेखा है में GUTS का उपयोग शुरू किया)। जीयूटीएस अभी भी एक युवा परियोजना है, लेकिन यह देखने के लायक है कि क्या आप ढांचे पर विचार कर रहे हैं।

  1. चमकदारसूची - यदि आप यूआई में कुछ भी कर रहे हैं जिसमें सूचियां, टेबल या पेड़ शामिल हैं, तो आपको GlazedLists पर एक कठिन नज़र रखना चाहिए। यह एक अविश्वसनीय प्रोजेक्ट है (न केवल स्विंग ऐप्स के लिए, लेकिन यह वास्तव में उस क्षेत्र में चमकता है)

  2. प्रमाणीकरण - JGoodies की एक बहुत अच्छी सत्यापन लाइब्रेरी है। इसे जानें, इसका इस्तेमाल करें, इसके साथ एक बनें। वास्तविक समय सत्यापन एक आधुनिक स्विंग ऐप का एक अविश्वसनीय रूप से महत्वपूर्ण हिस्सा है।

  3. मिगलाउट - मिग लेआउट मैनेजर सबसे अच्छा है। मैं दृढ़ता से एक आईडीई जीयूआई बिल्डर का उपयोग करने के प्रलोभन के खिलाफ सलाह देता हूं - मिगलाउट (इसमें कुछ घंटे लगेंगे, शीर्ष), और कोड चीजें हाथ से सीखें।

तो वे मेरी पुस्तक में कुंजी, बिल्कुल जरूरी पुस्तकालय हैं।

अब कुछ अवधारणाओं:

ए प्रस्तुति मॉडल - मार्टिन Fowler इस डिजाइन पैटर्न पर जानकारी का एक बहुत कुछ है। लंबा और छोटा, यह व्यवहार को जीयूआई स्तर पर प्रस्तुतिकरण से अलग करता है। यदि आप एमवीसी के लिए उपयोग किया जाता है, प्रेजेंटेशन मॉडल अलग होने की एक और परत जोड़ता है जो 'लाइव' यूआई के लिए काफी महत्वपूर्ण है। मेरे सभी विचारों को संबंधित प्रेजेंटेशन मॉडल द्वारा समर्थित किया जाता है। अंत परिणाम यह है कि व्यू कोड वास्तव में सरल है - दो चीजों पर ध्यान केंद्रित करना: 1. लेआउट, और 2. प्रस्तुतिकरण मॉडल में बाध्यकारी दृश्य घटक। बस।

बी व्यू जेपीनेल के उप-वर्ग नहीं हैं। इसके बजाए, मैं व्यूअर को एक निर्माता के रूप में पेश करने की जेजीडीज प्रेरित तकनीक का पालन करता हूं जो जेपीनेल बनाता है। बुनियादी पैटर्न है:

public class MyView{ 
    private MyPresentationModel model; 

    private JButton okButton; 
    private JButton cancelButton; 
    ... 

    public MyView(MyPresentationModel model){ 
    this.model = model; 
    } 

    public JPanel buildView(){ 
    initComponents(); // this method actually creates the okButton and cancelButton objects 
    bindComponentsToModel(); // this method binds those objects to the PresentationModel 
    JPanel p = new JPanel(new MigLayout()); 
    p.add(...); 
    ... 
    return p; 
    } 
} 

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

सी। घटनाओं का उपयोग ईवेंट ईवेंट हैंडलर नहीं। जेएसआर 2 9 6 वास्तव में क्रियाओं को बनाने और काम करने में आसान बनाने का अच्छा काम करता है।

डी। ईडीटी से लंबे समय तक चलने वाले संचालन (यहां तक ​​कि कुछ भी जो 100 एमएमएस लेता है) करें। जेएसआर 2 9 6 इसे टास्क सपोर्ट के साथ काफी आसान बनाता है - लेकिन जब अपवाद हैंडलिंग की बात आती है तो 2 9 6 के टास्क सिस्टम में कई गॉथस हैं। यदि आपके पास संपत्ति में परिवर्तन होते हैं जो बदले में लंबे समय तक चलने वाली घटनाओं में पड़ते हैं, तो सुनिश्चित करें कि आप सावधानी से सोचें कि किस बदलाव में ये परिवर्तन होने जा रहे हैं। कार्य का उपयोग करना आपके विकास के तरीके में एक बड़ा बदलाव है, लेकिन यह वास्तविक स्विंग एप्लिकेशन के लिए वास्तव में एक महत्वपूर्ण क्षेत्र है - इसके बारे में जानने के लिए समय लें।

ई। संसाधन इंजेक्शन महत्वपूर्ण है। शुरुआत से इसका उपयोग करें (स्वयं को यह बताने के बजाय कि आप इसे बाद में जोड़ देंगे) - यदि आप खुद को जेएलएबल पर सेटटेक्स्ट() को कॉल करते हैं, तो वापस बैठने और setName() को कॉल करने का समय है, और संसाधनों में एक प्रविष्टि जोड़ें फ़ाइल। यदि आप इसके बारे में अनुशासित हैं तो जेएसआर 2 9 6 यह बहुत आसान बनाता है।

मुझे लगता है कि यह अभी के लिए पर्याप्त है - यह बहुत ही जटिल विषय है। मैंने पिछले 7 या 8 वर्षों में अपने सिर को उन चीजों में टक्कर लगी है जो काम नहीं करते हैं - और मैं लगातार उन चीजों को करने के बेहतर तरीके ढूंढ रहा हूं जो मेरे लिए अच्छी तरह से काम करते हैं।

+0

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

+0

जेपीनल (या किसी भी जेकंपोनेंट) को विस्तारित करने में क्या गड़बड़ है? यदि मेरे पास है, उदाहरण के लिए, एक पैनल जिसका उद्देश्य एक नक्शा दिखाना है, मैं MapPanel नामक एक कक्षा बनाउंगा, जेपीनल का विस्तार करूंगा, और पैनल पर एक नक्शा खींचूंगा। –

+0

उस उपयोग के साथ कोई समस्या नहीं, थॉमस - मेरे पास जो मुद्दा है वह परिदृश्य है जहां लोग उप-वर्ग जेपीनल हैं ताकि वे इसमें घटक जोड़ सकें (जेएफआरएएम या जेडियलोग से विस्तार करना एक बेहतर उदाहरण है - मैं पोस्ट को संपादित करूंगा संकेत मिलता है कि)। आपके मामले में, यदि आपने मानचित्र को JScrollPane के अंदर रखा है, तो पैनल में JScrollPane जोड़ा गया है, तो मैं कहूंगा कि एक अलग दृष्टिकोण की आवश्यकता थी। लेकिन वास्तव में एक नया यूआई घटक बनाने के लिए, जेपीनल का विस्तार करने का रास्ता है। –

1

जावा ट्यूटोरियल में एक स्विंग ट्रेल है जो अवधारणाओं को सीधे प्राप्त करने के लिए बहुत अच्छा है।

यदि आप वेब ऐप्स पर उपयोग किए जाते हैं, तो आपको GUI- मॉडल को भ्रमित करने के बजाय आपको सीधे यह मिल जाएगा।

http://java.sun.com/docs/books/tutorial/uiswing/

+0

निश्चित रूप से मैंने यह देखा :) लेकिन यह उल्लिखित श्रेणी में आता है: मुझे हर विजेट के बारे में बहुत सारे detals बताते हैं (इसमें कोई संदेह नहीं है कि यह किसी बिंदु पर देखना अच्छा होगा, और वहां कुछ और दिलचस्प चीजें हैं!), लेकिन मैं वास्तुकला को सही तरीके से ढूंढ रहा हूं! – Henning

1

मार्टिन फाउलर ने a development on his Patterns of Enterprise Application Architecture book शुरू किया है जिसमें कुछ पैटर्न शामिल हैं जो मूल पुस्तक में शामिल नहीं थे, जिनमें GUI patterns शामिल हैं।

हालांकि इसकी सामग्री विशेष रूप से जावा उन्मुख नहीं है, वे बहुत मूल्यवान हैं।

+0

उन लोगों के लिए धन्यवाद - मैं उन्हें देख लूंगा! – Henning

+0

एफओआई डेवलपर के रूप में मेरे विकास में फाउलर का काम अविश्वसनीय रूप से सहायक रहा है। एक बार उस बिंदु पर पहुंचने के बाद अत्यधिक अनुशंसा की जाती है जहां आप एक डिजाइन पैटर्न स्तर पर जीयूआई विकास के बारे में अपनी सोच को अमूर्त कर सकते हैं। प्रेजेंटेशन मॉडल बेहद उपयोगी है। –

0

आप Spring Rich Client project को आजमा सकते हैं। वसंत पोर्टफोलियो के बाकी हिस्सों के साथ मेरा बहुत अच्छा अनुभव है।

+0

धन्यवाद! मैं इसके बारे में जानता था और इसे जल्दी या बाद में देखता हूं।लेकिन सबसे पहले, मैं स्क्रैच से सीखना चाहता हूं कि इसे ठीक से कैसे किया जाए, फिर मुझे कुछ नई कार्यक्षमता को मौजूदा कोडबेस में एकीकृत करना होगा (और आखिर में इस आधार को इस आधार पर दोबारा प्रतिक्रिया दें)। तो पूरी तरह से उड़ाए गए ढांचे शायद मैं नहीं कर सकता। – Henning

0

एक और बहुत ही बुनियादी, बहुत सरल इस बारे में बातें दिखा howto है:

http://www.macs.hw.ac.uk/guidebook/?name=Using%20The%20GUI&page=1

मैं अगर मैं नियंत्रक ही ActionListener को लागू करने का विचार पसंद यकीन नहीं है - दूसरी ओर, यदि ऐसा नहीं होगा, मुझे इसके लिए एक अतिरिक्त कक्षा की आवश्यकता होगी, जिसे फिर से नियंत्रक को जानना होगा और उसे चीजों को बताना होगा ...

शायद समस्या यह है कि स्विंग घटकों के कितने संभावित विकल्प हैं एक नियंत्रक के साथ संवाद कर सकते हैं, और उनमें से कोई भी पहली नज़र में वास्तव में "सही" लग रहा है ..

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

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