2012-04-05 2 views
5

프로젝트를 진행 중입니다. 커맨드 라인이나 윈도우 서비스에서 실행될 수있는 독립적 인 jar 파일로 코어를 구현하려고합니다. 코어는 파일 몇 개를 추적하고 알림 이메일을 보내야 할 책임이 있습니다. 문제는 GUI를 완전히 독립적으로 유지하는 가장 좋은 방법은 무엇입니까? 코어와 Java GUI를 완전히 분리하는 방법

  • 샌드 파일에 대한 상태 알림 익스플로러받을 해당 파일이 처리 된 정도에 관한 핵심에서 알림을받을 파일의

    • 보내기 목록 코어 interation 다음

      GUI를 요구

      /가공/GUI에 표시 할 수 없음 등
    • 코어에서 들어오는 메시지가있는 경우 정보 수신

    델파이와 C.에서 개발 된이 소프트웨어는 C가 핵심 로직을 코딩하고 Windows 메시지와 콜백을 사용하여 C DLL/서비스에 Delphi GUI를 등록했습니다. 자바에서 구현하는 방법을 혼란 스럽다.

    • 옵저버 패턴?
    • 코어와 GUI 사이의 작은 클라이언트/서버 통신?

    피씨 : 내가 여기서 논의하는 이유는 자바로 코딩 할 때 그러한 소프트웨어에 대한 더 나은 디자인을 배우고 탐색하는 것입니다. Observer Pattern 문서 또는 클라이언트 서버 아키텍처를 요구하지 않습니다. 내가 알지 못하는 다른 가능한 수단이있을 수 있습니다. 그래서 나는 어떤 생각, 디자인 또는 프레임 워크를 기대하고 있습니다.

  • 답변

    3

    Oberserver 패턴은 실제로 4 가지 사용 사례 중 3 가지에 대한 정답입니다.

    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 
    } 
    

    아마도 코어와 사용자 GUI가 서로 다른 스레드에서 실행되기를 원할 것입니다. 그렇지 않으면 코어가 실행되는 동안 GUI가 어떤 이벤트에도 반응하지 않습니다. 코어가 GUI에 관해서는 아무것도 알지 않아야하므로, 스레드 간의 핸드 오버는 GUI에 의해 행해져 야한다. 즉, 청취자는 GUI를 갱신하기 위해 SwingUtilities.invokeLater 또는 invokeAndWait을 사용해야한다.

    +0

    . 회신을 선택하기 전에 더 많은 응답을 기다리고 있습니다. –

    1

    어쩌면이 대답은 약간 오래된 학교가 될 것입니다. 그러나 평범한 옛 IPC는 어떻습니까?

    GUI가 코어를 별도의 스레드로 인스턴스화하고 메시지 대기열 (java.util.concurrent. *)을 통해서만 통신하도록하십시오. 그것들을 사용하여 파일, 이벤트, 진행 보고서 및 사실상의 목록을 보내십시오.

    그런 다음 모든 인터페이스가 코어의 진입 점을 알고 있으면 비즈니스를 수행하는 동안 여러 개의 인터페이스를 제공 할 수 있습니다.

    +0

    다른 프로세스에서 gui와 core를 실행할 필요가 없습니다 –

    관련 문제