模块java类之间的循环依赖

时间:2017-10-20 14:48:16

标签: java websocket package circular-dependency

我有两个模块:UI和Core。在最后一个驻留在业务处理逻辑中。在我的第一个实现中,UI模块依赖于Core模块。

但是现在我已经在UI模块中实现了websocket,用于向UI / websocket发送消息以更新有关状态更改的UI。

我们在UI模块中有一个Handler类,它可以将消息发送到UI-websocket。 我的问题是:如何访问Core中的Handler类以向websocket发送消息?

2 个答案:

答案 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)方法。但是库源代码不依赖于客户端代码。