由于我大部分的编程工作都是用Java进行的,因此我觉得将一个类导出为Node.js模块比将对象实例导出更具吸引力,例如:
class Connection {
constructor(db) {
this.db = db;
}
connect(connectionString) {
this.db.connect(connectionString);
}
}
exports.Connection = Connection;
由于在依赖模块中需要对类进行多次实例化,因此我仍然需要导出一个已经存在的实例以供生产代码的其余部分使用。 我在同一模块中完成这个操作:
exports.connection = new Connection(require("mongoose"));
这可以实现一定的可测试性,因为真实的依赖关系可以在测试中替换:
const Connection = require("./connection").Connection;
describe("Connection", () => {
it("connects to a db", () => {
const connection = new Connection({connect: () => {}});
// ...
});
});
这种方法可以奏效,但感觉有些奇怪,因为我在混合两种模式:导出原型(用于单元测试)和实例(用于生产代码)。这种方式可接受吗?我应该继续使用它还是改用其他方式?如果需要更改,那么什么是首选模式?