当基类添加扩展类时,如何避免循环依赖?

问题描述 投票:0回答:1

我正在使用从容器类扩展的类。该类的每个实例本身就是一个容器,但是顶级容器不是该类的实例。

文件1

const Command = require('Command');
class CommandManager {
    constuctor () {
        this.commands = {};
    }
    add (object) {
        const command = new Command(object);
        this.commands[command.name] = command;
    }
    get (string) {
        return this.commands[string];
    }
}

文件2

const CommandManager = require("CommandManager");
class Command extends CommandManager {
    constructor (object) {
        super();
        //Other-code
    }
    // Class Methods
}

在运行时,它应该看起来像这样:

client.commands = new CommandManager();
client.commands.add(object); // Add function also filters down adding to sub elements

或:

const command = client.commands.get(string);
command.add(object);

问题是,这些文件中至少有一个以空对象结尾或未从所需类中定义。我尝试取消其他节点圆形依赖解决方案的尝试没有成功(或者我没有正确理解它们)。

目的是将2个类保留在各自的文件中,我知道我可以通过使用相同的文件来解决此问题(但这在项目中是个例外吗?),我不确定如何(或消费者)会在逻辑上要求它,因为他们位于不同的领域。

那么,我想念哪些方式,以致于我失踪了?

javascript node.js class require circular-dependency
1个回答
0
投票

根据Bergi发表的评论:

使CommandManager文件中的require延迟可以延迟模块的加载,并允许在调用之前解决依赖关系。

class CommandManager {
    constuctor () {
        this.commands = {};
    }
    add (object) {
        const Command = require('Command');
        const command = new Command(object);
        this.commands[command.name] = command;
    }
    get (string) {
        return this.commands[string];
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.