2017-10-20 15 views
0

UI와 코어라는 두 개의 모듈이 있습니다. 마지막으로 비즈니스 처리 논리가 상주합니다. 첫 번째 구현에서 UI 모듈은 핵심 모듈에 종속됩니다.모듈 간 순환 의존성 java 클래스

하지만 이제는 UI 모듈에서 Websocket을 구현하여 UI 변경 사항에 대한 UI를 업데이트하기 위해 UI/websocket에 메시지를 보냈습니다.

UI-websocket에 메시지를 보낼 수있는 UI 모듈에 Handler 클래스가 있습니다. 내 문제는 : 코어에서 Handler 클래스에 액세스하여 websocket에 메시지를 보내려면 어떻게합니까?

답변

1

순환 종속성을 해결하려면 공통 종속성을 다른 새 패키지로 이동하고 두 원본 패키지를 새 패키지에만 의존하게해야합니다. 예를 들어 websocket 클래스를 새로운 패키지로 옮길 수 있습니다. transfer object pattern도 사용하십시오.

0

모듈 A는 interface을 정의하고 모듈 B가 인터페이스를 구현하는 콜백 객체를 전달하기 위해 호출 할 수있는 메서드를 제공하는 경우 모듈 B에 의존하지 않고 모듈 B를 호출 할 수 있습니다.


가정 해 내가는 foobar 라이브러리를 정의하고는 foobar 라이브러리의 상태 때문에 일부 외부 이벤트를 변경할 수 있다고 생각했습니다. 라이브러리 클라이언트가 상태 변경을 인식하기를 원한다면, 나는 콜백 메커니즘을 제공 할 수있다 :

interface StatusCallback { 
    void statusChange(Status status); 
} 

class Foobar { 
    ... 
    void registerStatusCallback(StatusCallback statusCallback); 
    ... 
} 
클라이언트 라이브러리로 제공 StatusCallback을 implments 인스턴스를 생성하여 사용

:

Foobar foobar = ...; 

statusCallback = new StatusCallback() { 
    void statusChange(Status status) { 
     ...do something with changed status... 
    } 
}; 

foobar.registerStatusCallback(statusCallback); 

이제 외부 이벤트가 발생하고 상태가 변경 될 때마다 라이브러리는 클라이언트의 statusChange(status) 메소드를 호출합니다. 그러나 라이브러리 소스 코드는 클라이언트 코드에 의존하지 않습니다.

+0

이것에 대해 자세히 설명해 주시겠습니까? 나는 많이 이해하지 못했습니다 .. – user5636236

+0

@ user5636236, 위의 확장 대답을 참조하십시오. –