nodejs:节点模块vs单例类

PRE:我已经读过NodeJS模块vs类,但是这更具体。

作为Node中一些重构的一部分,我有几个应用服务(DDD术语),这些应用服务在技术上被实现为Node模块。

由于(在一个DDD世界,可能是任何其他的事情)应用程序服务应该是单身人士,并且由于节点模块保证是1“实例”只,在我看来,这是一个好的适合(模块trivially实施'singletonness')

除了纯粹的观点之外,我有什么理由重新考虑将这些应用服务重构为适当的单例类(只要在javascript中可以保证“singletonness”)呢?

查看Node的模块caching警告,了解模块的“singletoness”将会崩溃的情况。

如果你总是在一个包里引用你的单例模块和文件path(以.//开头),那么你是安全的。

如果你的服务被封装在一个被其他模块使用的包里,你可能会得到你的单例的多个实例。

假设我们发布这个甜美的服务库:

 service-lib/ ⌞ package.json ⌞ service.js service.js: var singleton = {}; module.exports = singleton; 

在这个应用程序中, server.jsother.js将获得我们服务的不同实例:

 app/ ⌞ server.js ⌞ node_modules/ ⌞ service-lib/ ⌞ service.js ⌞ other-package/ ⌞ other.js ⌞ node_modules/ ⌞ service-lib/ ⌞ service.js 

虽然这个应用程序将共享一个实例:

 app/ ⌞ server.js ⌞ node_modules/ ⌞ service-lib/ ⌞ service.js ⌞ other-package/ ⌞ other.js 

同一个npm install相同的app可能会导致依赖于版本依赖关系的目录结构。 节点的文件夹文件有详细信息。