模块之间的循环依赖关系java类

模块之间的循环依赖关系java类

问题描述:

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

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

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

为了解决循环依赖问题,您应该将通用依赖关系移动到另一个新包,并使两个原始包依赖于新包。例如,您可以将websocket类移动到新的包中。也考虑使用transfer object pattern

如果模块B定义了interface,并且它提供了模块B可以调用的方法来传递实现接口的回调对象,则模块A可以调用模块B而不依赖于模块B.


假设我已经定义了Foobar库,并且假设Foobar库的状态可能因某些外部事件而改变。如果库的客户想知道的状态的变化,我可以提供一个回调机制:

interface StatusCallback { 
    void statusChange(Status status); 
} 

class Foobar { 
    ... 
    void registerStatusCallback(StatusCallback statusCallback); 
    ... 
} 

客户端通过创建implments StatusCallback一个实例,将其提供给图书馆使用它:

Foobar foobar = ...; 

statusCallback = new StatusCallback() { 
    void statusChange(Status status) { 
     ...do something with changed status... 
    } 
}; 

foobar.registerStatusCallback(statusCallback); 

现在,只要发生外部事件并且状态发生变化,库就会调用客户端的方法statusChange(status)。但是,库源代码不依赖于客户端代码。

+0

你能详细说明一下吗?我不明白太多.. – user5636236

+0

@ user5636236,请参阅上面的我的扩展答案。 –