在node.js中过度使用require(),mongoose

我是Node.js的新手,但非常喜欢模块系统和require() 。 这就是说,来自C背景,这让我不安地看到相同的模块被require()在任何地方。 总而言之,这会导致我在某些deviseselect上偏离了在C中完成的事情。例如:

  • 我应该在每个定义mongoose模型的文件中require()mongoose吗? 或者将mongoose实例注入到定义模型的每个文件中。
  • 我应该在每个需要它们的模块中需要require()我的mongoose模型吗? 或者有一个模型提供者被传递并用于提供这些模型。

等。 对于使用dependency injection的人来说 – 我的直觉C感觉告诉我只require()一个模块一次,并根据需要传递它。 但是,在看了一些开源的东西之后,这似乎并不是Node的事情。 require()确实让事情变得非常简单

过度使用这个机制会伤害吗?

require()在使用时caching模块。 当你看到相同的文件或模块需要到处只加载一次,而存储的module.exports被传递。 这意味着您可以随处使用require ,而不用担心性能和内存问题。

由于cptroot状态需要一个模块,所以你需要它而不是传递它作为一个参数是安全的,而且也容易得多。 但是,您应该将任何require调用视为硬编码的依赖关系,您不能轻易更改。 例如,如果你想模拟一个模块来testing这些硬编码的依赖将会受到伤害。

所以传递一个模块实例作为参数,而不是一次又一次地要求它减less了硬编码依赖的数量,因为现在你注入了这个依赖。 例如,在你的testing中,你将会从简单的注入模拟中受益。

如果你走这条路,你会想要使用一个dependency injection容器,它可以帮助你注入所有的依赖关系,摆脱所有硬编码的require调用。 要select一个适合你的项目的dependency injection容器,你应该阅读这个优秀的文章 。 另外检查出火! 我实施的。