【发布时间】:2011-03-22 09:11:02
【问题描述】:
我有一个 RequestHandler 类和一个 RequestListener 类。 RequestHandler 创建一个 RequestListener 并将一个引用传递给它自己。 RequestListener 依次调用 RequestHandler 上的方法来处理不同类型的请求(例如,handleTypeARequest()、handleTypeBRequest() 等)。不幸的是,RequestHandler 也调用了 RequestListener 上的方法(例如 processNextRequest()),所以我有一个循环依赖:
class RequestHandler {
RequestListener requestListener;
...
}
class RequestListener {
RequestHandler requestHandler;
...
}
这意味着两者之间的耦合更紧密,通常被认为是代码异味。
一种解决方案是使用不同的对象来封装每个请求,而不是使用不同的方法。当出现提示时,RequestListener 可以处理请求并为其返回某种类型的 Request 对象。不幸的是,我不太喜欢这种方法,部分原因是增加了更多对象和类的复杂性,部分原因是性能问题(这很重要);直接在 RequestHandler 上调用 handleXXXRequest() 方法比创建一堆对象并可能还维护一个堆栈来缓冲它们直到需要时要快得多。
这个问题还有其他解决方案吗,还有,真的是个问题吗?
【问题讨论】:
-
“请求监听器”是否应该负责处理请求?在我看来,听者只负责听。 “请求处理程序”应该负责处理或“处理”听众听到的内容。
标签: language-agnostic circular-dependency circular-reference