2012-04-05 14 views
5

私はプロジェクトに取り組んでいます。私はコマンドラインまたはWindowsサービスから実行できる独立したjarファイルとしてコアを実装しようとしています。コアはファイルの数を追跡し、通知電子メールを送信する責任があります。質問は、GUIを完全に独立させたままにする最良のアイデアは何でしょうか?コアからJava GUIを完全に分離する方法

GUIは、ファイル

  • のコア

    • 送信リストで、次のinterationを必要とし、それらのファイルが
    • を処理してきたどのくらいに関するコアからの通知を受け取るには、ファイルに関するステータス通知を受け取る/ /送信処理を、すなわち、 GUIなどで表示されるエラーなど
    • コアからの着信メッセージがある場合、情報を受信します。

    私はDelphiとCでこのソフトウェアを開発しました。Cはコアロジックをコーディングし、Windowsのメッセージとコールバックを使用してCのdll/serviceにDelphi GUIを登録しました。私はjavaでそれを実装する方法が混乱しています。

    • オブザーバーパターン?
    • コアとGUI間の小さなクライアント/サーバー通信?

    P.S: 私がここで議論している理由は、Javaでコード化されたときに、そのようなソフトウェアのより良い設計を学び、探求することです。 Observer Patternのドキュメントやクライアントサーバーのアーキテクチャを求めているわけではありません。私が気付いていない他の可能な手段があるかもしれません。だから私はどんなアイデア、デザイン、フレームワークも楽しみにしています。

  • 答えて

    3

    Oberserverパターンは、実際には4つの使用例のうち3つの正解です。

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

    リスナーインタフェースは、この1

    public interface ProgressListener{ 
        madeProgress(ProgressEvent) 
    } 
    

    によってProgressEventには本当に似ています(とその他:あなたの説明のレベルでは

    は、次のインターフェイスは、あなたのコアで実装しているかもしれませんあなたイベントクラス)は、値オブジェクトでなければなりません。

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

    おそらく、あなたのコアとGUIが別のスレッドで動くようにします。さもなければ、あなたのGUIはコアが動いている間にいかなるイベントにも反応しません。コアはGUIについて何も知らなくてはならないので、スレッド間のハンドオーバはGUIによって行われなければならない。すなわち、リスナはGUIを更新するためにSwingUtilities.invokeLaterまたはinvokeAndWaitを注意して使用すべきである。

    +0

    あなたの回答を回答として選択する前に、より多くの回答を待っています。 –

    1

    おそらく、この回答は少し古い学校に見えますが、普通の古いIPCはどうでしょうか?

    GUIがコアを別のスレッドとしてインスタンス化し、メッセージキュー(java.util.concurrent。*)を介してのみ通信するようにします。それらを使用して、ファイル、イベント、進捗報告などのリストを送信します。

    次に、すべてのインターフェイスがコアのエントリポイントを知っていれば、ビジネスに携わっている限り、複数のインターフェイスを出荷できます。

    +0

    異なるプロセスでguiとcoreを実行する必要はありません –

    関連する問題