想象一下,我们得到了 2 个简单的类(省略导出):
class SomeService {
async func () {
// some async function logic
return value;
}
}
class SomeController {
constructor (service) {
this.service = service;
}
async func () {
const value = await this.service.func();
// some controller-specific logic here
return value;
}
}
此外,我们得到了简单的函数,它以两种方式使用这两个类。
案例一:
// require clasess
const somefunc = async () => {
const controller = new SomeController(new SomeService());
const value = await controller.func();
return value;
}
module.exports = somefunc;
案例二:
// require clasess
const controller = new SomeController(new SomeService());
const somefunc = async () => {
const value = await controller.func();
return value;
}
module.exports = somefunc;
据我了解,在第一种情况下,节点的require
是如何工作的controller
每次调用somefunc
时都会创建。在第二种情况下,controller
仅创建一次,此时将评估文件。什么情况更好,更重要的是我应该阅读或查找什么来理解为什么?
我想答案取决于您的用例。您必须问自己是否需要在每次调用函数时重新创建SomeController
。还要考虑的另一件事是SomeController
初始化时是否依赖于异步的东西。例如,如果控制器需要访问其构造函数中的数据库连接,则必须等待建立数据库连接。在这种情况下,您可能别无选择,只能在函数中初始化SomeController
。正如我所说,在这种情况下没有客观better
。这完全取决于您的用例。