2009-01-15 13 views
7

मेरे वर्तमान एप्लिकेशन में जेएफआरएएम के भीतर फ़ील्ड के रूप में संग्रहीत लगभग 15 कार्यों के साथ एक जेएफआरएम है। प्रत्येक क्रिया एक अज्ञात वर्ग है और उनमें से कुछ बहुत लंबे हैं।स्विंग एप्लिकेशन में क्रियाएं व्यवस्थित करना?

क्या यह संभवतः उप-पैकेज के भीतर अपने स्वयं के वर्गों में कार्यों को तोड़ना आम है?

यदि नहीं, तो यह जटिलता आमतौर पर कैसे बनाई जाती है?

धन्यवाद

उत्तर

8

यदि यह संभव है कि आपके कार्यों को पुन: प्रयोज्य किया जा सके (उदाहरण के लिए, कीबोर्ड शॉर्टकट्स, अन्य मेनू, अन्य संवाद, आदि से) और विशेष रूप से यदि वे सीधे अंतर्निहित मॉडल (यूआई के बजाए) पर काम कर सकते हैं, तो आम तौर पर उन्हें अज्ञात कक्षाओं के रूप में नहीं रखना बेहतर होता है।

इसके बजाय, एक अलग पैकेज बनाएं, और प्रत्येक के लिए कक्षाएं बनाएं।

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

अंत में, जांचें कि आपके कार्यों को कक्षा पदानुक्रम में दोबारा क्रियान्वित किया जा सकता है या नहीं। वे अक्सर कोड प्रतिकृति को सहेज सकते हैं, और आपको मजबूती जोड़ने में भी मदद करता है (उदाहरण के लिए, कार्रवाई निष्पादित करने से पहले कुछ शर्तों की जांच करें)।

+0

मुझे लगता है कि शायद एक विकल्प के रूप में या एक्शनमैनगर के अलावा, क्रियाएं अच्छे उम्मीदवारों को एक दृश्य में इंजेक्शन देने के लिए हैं, उदाहरण के लिए वसंत। – ktulinho

4

आमतौर पर मैं इसे कैसे करता हूं। प्रत्येक क्रिया को अपनी खुद की कक्षा मिलती है जिसमें "ऐप" ऑब्जेक्ट का संदर्भ होता है ताकि यह आवश्यक संसाधनों को प्राप्त कर सके। मेरे पास आमतौर पर एक एक्शन मैनेजर होता है जिसमें सभी क्रियाएं होती हैं, इसलिए उन्हें एक्सेस करने के लिए एक स्थान और साथ ही साथ उनकी सक्षमता और सामान को अपडेट करने के लिए एक स्थान भी होता है।

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

2

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

public abstract class CalcAndShowAction extends AbstractAction { 
    //initialization code - setup icons, label, key shortcuts but not context. 

    public void actionPerformed(ActionEvent e) { 
     //abstract method since it needs ui context 
     String data = getDataToCalc(); 

     //the actual action - implemented in this class, 
     // along with any user interaction inherent to this action 
     String result = calc(data); 

     //abstract method since it needs ui context 
     putResultInUI(result); 
    } 
    //abstract methods, static helpers, etc... 
} 

//actual usage 
//... 
button.setAction(new CalcAndShowAction() { 
    String getDataToCalc() { 
     return textField.getText(); 
    } 

    void putResultInUI(String result) { 
     textField.setText(result); 
    } 
}); 
//... 

(कोई गलती के लिए खेद है, मैं इस पाठ बॉक्स में हाथ से लिखा है, एक IDE में नहीं)।

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