我有两个模块:UI和Core。在最后一个驻留在业务处理逻辑中。在我的第一个实现中,UI模块依赖于Core模块。
但是现在我已经在UI模块中实现了websocket,用于向UI / websocket发送消息以更新有关状态更改的UI。
我们在UI模块中有一个Handler类,它可以将消息发送到UI-websocket。 我的问题是:如何访问Core中的Handler类以向websocket发送消息?
答案 0 :(得分:1)
为了解决循环依赖关系,您应该将公共依赖项移动到另一个新的包,并使两个原始包依赖于新的包。例如,您可以将websocket类移动到新包中。另请考虑使用transfer object pattern。
答案 1 :(得分:0)
模块A可以在不依赖于模块B的情况下调用模块B,如果它定义了interface
,并且它提供了模块B可以调用的方法来传递实现接口的回调对象。
假设我已经定义了Foobar库,并假设Foobar库的状态可能因某些外部事件而发生变化。如果库客户端想要了解状态更改,我可以提供回调机制:
interface StatusCallback {
void statusChange(Status status);
}
class Foobar {
...
void registerStatusCallback(StatusCallback statusCallback);
...
}
客户端通过创建一个展示StatusCallback
的实例来使用它,并将其提供给库:
Foobar foobar = ...;
statusCallback = new StatusCallback() {
void statusChange(Status status) {
...do something with changed status...
}
};
foobar.registerStatusCallback(statusCallback);
现在,只要外部事件发生且状态发生变化,图书馆就会调用客户端的statusChange(status)
方法。但是库源代码不依赖于客户端代码。