PRE:我读过NodeJS modules vs classes,但这更具体。
作为Node中的一些重构的一部分,我有几个应用服务(在DDD术语中),它们在技术上被实现为Node模块。
由于(在DDD世界中,可能是其他任何问题)应用程序服务应该是单例,因为Node模块只能保证1'实例',在我看来这是合适的(模块)平凡地实现'单身性')
我是否有任何理由考虑将这些应用程序服务重构为正确的单例类(除了纯粹的观点之外,还可以在javascript中保证'单一性')
答案 0 :(得分:6)
查看Node's module caching caveats,了解模块的'singletoness'会崩溃的情况。
如果您始终在单个包中引用包含文件路径(从./
,../
或/
开始)的单件模块,那么您将是安全的。
如果您的服务包装在一个包中供其他模块使用,您最终可能会遇到单个实例的多个实例。
假设我们发布了这个甜蜜的服务库:
service-lib/
⌞ package.json
⌞ service.js
service.js:
var singleton = {};
module.exports = singleton;
在此应用中,server.js
和other.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
可能导致任一目录结构,具体取决于依赖项的版本。节点的folders doc包含详细信息。