2012-04-05 18 views
5

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

जीयूआई जरूरतों कोर के साथ interation निम्न फ़ाइलों का

  • भेजने सूची
  • के बारे में कितना उन फ़ाइलों को संसाधित किया गया है कोर से सूचनाएं प्राप्त
  • फ़ाइलों के संबंध में स्थिति सूचनाएँ प्राप्त यानी भेजें/प्रसंस्करण/असफल इत्यादि जीयूआई
  • में जानकारी प्राप्त होने पर जानकारी प्राप्त होती है यदि कोर
से आने वाले संदेश हैं

मेरे पास यह सॉफ्टवेयर डेल्फी में विकसित हुआ था और सी सी का उपयोग मूल तर्क को कोड करने और विंडोज संदेशों और कॉलबैक का उपयोग करने के लिए किया गया था, मैंने सी डीएल/सेवा पर डेल्फी जीयूआई पंजीकृत किया था। मैं उलझन में हूं कि इसे जावा में कैसे कार्यान्वित किया जाए।

  • पर्यवेक्षक पैटर्न?
  • कोर और गुई के बीच छोटे ग्राहक/सर्वर संचार?

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

उत्तर

3

ओबेरसेवर पैटर्न वास्तव में आपके 4 उपयोग मामलों में से तीन के लिए सही उत्तर है।

public interface Core { 

    sendFiles(List<File> files); 
    registerProgressListener(ProgressListener listener);    
    registerStatusListener(StatusListener listener); 
    registerMessageListener(MessageListener listener); 
} 

श्रोताओं इंटरफेस वास्तव में यह एक

public interface ProgressListener{ 
    madeProgress(ProgressEvent) 
} 

ProgressEvent के समान दिखाई देगें (और अन्य:

अपने विवरण के स्तर पर आप निम्न इंटरफ़ेस अपने मूल द्वारा कार्यान्वित हो सकता है घटना वर्ग) मूल्य वस्तुओं होना चाहिए, उदाहरण के लिए

public class ProgressEvent { 
    public final double progress; 
    public final String fileName; 
    public ... // constructor 
} 

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

+0

सही। उत्तर के रूप में आपका उत्तर चुनने से पहले अधिक प्रतिक्रियाओं की प्रतीक्षा कर रहा हूं। –

1

शायद यह उत्तर थोड़ा पुराना स्कूल देखेगा, लेकिन सादे पुराने आईपीसी के बारे में क्या होगा?

जीयूआई कोर को एक अलग थ्रेड के रूप में तत्काल बनाएं, और केवल संदेश कतारों (java.util.concurrent। *) के माध्यम से संवाद करें। फ़ाइलों, घटनाओं, प्रगति रिपोर्ट और वस्तुतः कुछ भी सूची भेजने के लिए उनका इस्तेमाल करें।

फिर आप कई इंटरफेस भेज सकते हैं, जब तक कि सभी इंटरफेस कोर के लिए प्रवेश बिंदु को जानते हों, आप व्यवसाय में हैं।

+0

विभिन्न प्रक्रियाओं में गुई और कोर चलाने की कोई आवश्यकता नहीं है –

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