nodejs:节点模块与单例类

Gee*_*Jan 5 refactoring domain-driven-design node.js node-modules

PRE:我已经阅读过NodeJS模块和类,但这更具体.

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

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

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

hur*_*lad 6

查看Node的模块缓存注意事项,了解模块的"单线程序"将崩溃的情况.

如果你总是引用您的单模块文件路径(从./,..//一个单一封装你的安全范围内).

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

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

service-lib/
? package.json
? service.js

service.js:
  var singleton = {};
  module.exports = singleton;
Run Code Online (Sandbox Code Playgroud)

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

app/
? server.js
? node_modules/
  ? service-lib/
    ? service.js
  ? other-package/
    ? other.js
    ? node_modules/
      ? service-lib/
        ? service.js
Run Code Online (Sandbox Code Playgroud)

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

app/
 ? server.js
 ? node_modules/
    ? service-lib/
       ? service.js
    ? other-package/
       ? other.js
Run Code Online (Sandbox Code Playgroud)

相同npm installapp结果可能导致任一目录结构取决于依赖项的版本.Node的文件夹doc有详细信息.