nodejs:节点模块与单例类

时间:2012-07-31 17:32:05

标签: node.js refactoring domain-driven-design node-modules

PRE:我读过NodeJS modules vs classes,但这更具体。

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

由于(在DDD世界中,可能是其他任何问题)应用程序服务应该是单例,因为Node模块只能保证1'实例',在我看来这是合适的(模块)平凡地实现'单身性')

我是否有任何理由考虑将这些应用程序服务重构为正确的单例类(除了纯粹的观点之外,还可以在javascript中保证'单一性')

1 个答案:

答案 0 :(得分:6)

查看Node's module caching caveats,了解模块的'singletoness'会崩溃的情况。

如果您始终在单个包中引用包含文件路径(从./..//开始)的单件模块,那么您将是安全的。

如果您的服务包装在一个包中供其他模块使用,您最终可能会遇到单个实例的多个实例。

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

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可能导致任一目录结构,具体取决于依赖项的版本。节点的folders doc包含详细信息。