2008-12-27 6 views
8

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

मैंने अपना मॉडल बनाया है और यह ठीक काम करता है। इसमें एक छात्र वर्ग होता है जिसमें छात्र की जानकारी के साथ कई फ़ील्ड होते हैं (जाहिर है)। अब मैं यह जानकारी कुछ जेएलएबल्स में प्रदर्शित करना चाहता हूं। पूरे छात्र ऑब्जेक्ट को जीयूआई में पास करना और JLabel.settext.getname() आदि का उपयोग करना सबसे आसान है और इसमें कोई संदेह नहीं है कि यह पूरी तरह से काम करेगा। लेकिन मुझे लगता है कि छात्र वस्तु मॉडल का हिस्सा है और इसे जीयूआई में पास करके मैं अब एमवीसी पैटर्न का उपयोग नहीं कर रहा हूं। क्या मैं यहाँ हूँ?

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

इस पर कोई सलाह?

उत्तर

1

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

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

4

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

बड़ा सवाल यह है कि अलग-अलग स्विंग घटकों के आंतरिक मॉडल के साथ अपने डोमेन मॉडल को कैसे मेल करें। एक तरह से यह करने के लिए अपने GUI वर्ग में setModel() और getModel() विधियों, जो उन दोनों के बीच का अनुवाद है, यानी setModel() अपने मॉडल लेता है और अलग-अलग JLabels पर setText() कॉल, आदि

0

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

एमवीसी वास्तव में क्या है इसके कई अलग-अलग रूप और व्याख्याएं हैं, इसे गुगल करने का प्रयास करें। साथ ही, आप अक्सर अपने आवेदन में विभिन्न स्तरों पर एमवीसी पा सकते हैं (उदाहरण के लिए स्विंग मॉडल, आपका डोमेन मॉडल, ...)।

एमवीसी पर एमवीसी और वेरिएंट के साथ, सबसे महत्वपूर्ण बात यह है कि आप अलग-अलग उप-पैटर्न (पर्यवेक्षक, फेकाडे, ...) को समझा सकते हैं और को लागू करने की कोशिश करने के बजाय आपके द्वारा किए गए डिज़ाइन विकल्पों (फायदे/नुकसान) की रक्षा कर सकते हैं। एक और केवल अद्वितीय एमवीसी पैटर्न, यदि यह अस्तित्व में होगा।

तो अपने काम के लिए मेरी सलाह, निश्चित रूप से यदि संभव हो तो, कुछ है कि अच्छी तरह से काम करता है, क्या आप MVC और उसके subpatterns पर पढ़ा है से प्रेरित लागू करने के लिए, और केवल बाद में देखें कि यह कैसे अच्छी तरह से इस बात से सहमत है या कुछ से असहमत होगा एमवीसी पैटर्न के "पारंपरिक" वर्णन आप पा सकते हैं।

+0

यह सब सच है, लेकिन यह न भूलें कि होमवर्क अक्सर आपके शिक्षक के बारे में है और होमवर्क के बारे में नहीं है। अफसोस की बात है। –

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