有没有办法避免循环依赖,除了混合模块,这样的安排(它是一个象棋应用程序)
详细描述:
有Gui模块导入ChessWidget模块;
> ChessWidget只是包装ChessWorld模块并导入CellButton;
> CellButton模块导入模块Cell;
> ChessWorld模块进口板(代表它)和玩家(通知他们并取得他们的动作);
>板模块进口模块件;
> Piece模块进口模块Player;
这里是问题:
玩家模块需要了解其他玩家和棋盘,从而导入ChessWorld!
简短的介绍:
世界模块需要了解玩家模块(甚至由板/板块间接),玩家需要了解世界.
帮助非常感激.
PS:不是因为我不能使用循环依赖,而是因为它们是邪恶的.
按照
Dependency inversion principle:介绍ChessWorld实现的接口,Player依赖哪个Player和/或一个Player实现哪个Piece依赖(根据依赖关系的细节,这两者或两者可能是合适的).这通常与
Dependency Injection一起,如果依赖者需要动态实例化一些受信任的实例,则使用
Factory DP.