나는 RequestHandler 클래스와 RequestListener 클래스를 가지고있다. RequestHandler는 RequestListener를 생성하고 RequestListener를 자신에 대한 참조로 전달합니다. RequestListener는 RequestHandler의 메소드를 호출하여 처리 될 때 여러 유형의 요청 (예 : handleTypeARequest(), handleTypeBRequest() 등)을 처리합니다. 이 둘 사이에 단단한 결합을 의미하며, 일반적으로 코드 냄새로 간주이 순환 양방향 종속성을 어떻게 해결할 수 있습니까?
class RequestHandler {
RequestListener requestListener;
...
}
class RequestListener {
RequestHandler requestHandler;
...
}
: 불행히도, RequestHandler를도 그래서 순환 종속성이 (예 processNextRequest())에 RequestListener 메소드를 호출한다.
한 가지 해결책은 다른 방법 대신 각 요청을 캡슐화하기 위해 서로 다른 개체를 사용하는 것입니다. RequestListener는 메시지가 표시되면 요청을 처리하고 요청 객체의 일부 유형을 반환 할 수 있습니다. 불행히도, 나는이 접근법을 정말 좋아하지 않습니다. 부분적으로는 더 많은 객체와 클래스의 복잡성이 추가되고 부분적으로는 성능 문제 (여기서는 중요 함) 때문입니다. RequestHandler에서 handleXXXRequest() 메소드를 직접 호출하는 것은 많은 수의 객체를 생성하는 것보다 훨씬 빠르며 필요할 때까지 버퍼를 유지하는 스택을 유지하는 것보다 훨씬 빠릅니다.
이 문제에 대한 다른 해결책이 있습니까? 또한 은 정말로에 문제가 있습니까?
요청 청취자가 요청 처리를 담당해야합니까? 청취자는 청취에만 책임이 있습니다. "요청 처리자"는 청취자의 말을 처리하거나 "처리"해야합니다. –