У меня есть класс RequestHandler и класс RequestListener. RequestHandler создает RequestListener и передает ему ссылку на себя. RequestListener, в свою очередь, вызывает методы на RequestHandler для обработки запросов разных типов при их обработке (например, handleTypeARequest(), handleTypeBRequest() и т. Д.). К сожалению, RequestHandler также вызывает методы RequestListener (например processNextRequest()), так что у меня есть циклическая зависимость:Как можно решить эту круговую двунаправленную зависимость?
class RequestHandler {
RequestListener requestListener;
...
}
class RequestListener {
RequestHandler requestHandler;
...
}
Это означает более тесную связь между ними и, как правило, считается кодом запахом.
Одним из решений было бы использование разных объектов для инкапсуляции каждого запроса вместо разных методов. При запросе RequestListener мог обработать запрос и вернуть для него некоторый тип объекта Request. К сожалению, мне не очень нравится этот подход, отчасти из-за дополнительной сложности большего количества объектов и классов и отчасти из-за проблем с производительностью (что важно здесь); вызывающие методы handleXXXRequest() на RequestHandler напрямую намного быстрее, чем создание кучи объектов и, вероятно, также поддерживают стек для их буферизации до тех пор, пока это не понадобится.
Есть ли другие решения этой проблемы, а также, это действительно проблема?
Должен ли «слушатель запроса» отвечать за обработку запросов? Мне кажется, что слушатель отвечает только за прослушивание. «Обработчик запросов» должен отвечать за обработку или «обработку» того, что слышит слушатель. –