我正在NodeJS的一个家庭自动化项目中工作,有几个模块。这些模块需要访问中心DeviceManager
内的数据设备。通常我会为此创建一个单例,因此所有模块都访问DeviceManager
的相同状态。
要创建单身,我使用:
class DevicesManagerInstance {
constructor() {
this.devices = {};
}
addDevice(id, device) {
this.devices.id = device;
}
}
let DevicesManagerInstance = new DevicesManager();
module.exports = DevicesManagerInstance;
我发现了一些关于单身人士和共享数据的旧问题,但如果它是de NodeJS共享数据的方式,仍然不满意问题的答案:
但阅读单身人士也是一种反模式。有人可以澄清什么是" NodeJS"在模块之间共享数据的方式(在我的例子中是设备)。在Angular中,我会为此目的创建一个服务。
答案 0 :(得分:2)
为什么修复未破坏的东西?如果您的方法有效,那就有效。
话虽如此,如果我只想创建一个实例,我认为没有任何理由创建一个类。我会选择不同的方法:
var DeviceManager = {
devices: {},
addDevice(id, device) { // this is valid syntax
DeviceManager.devices[id] = device;
}
};
module.exports = DeviceManager;
或者,如果您不希望设备在模块外部可用:
var devices = {};
var DeviceManager = {
addDevice(id, device) { // this is valid syntax
devices[id] = device;
}
};
module.exports = DeviceManager;
答案 1 :(得分:1)
这是一个单独的实例,但是如果你需要类,你也可以轻松地将以下内容转换为类结构,
var DeviceManager = function() {
this.devices: []; // constructor
};
DeviceManager.prototype.addDevice = function(id, device) {
DeviceManager.devices[id] = device;
};
var deviceManager = new DeviceManager();
module.exports = deviceManager;
您可以访问其他模块中的设备
var DeviceManager = require('./devicemanager');
DeviceManager.devices; // accessing devices