5

上一页:我读过NodeJS 模块与类,但这更具体。

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

因为(在 DDD 世界中,可能是其他任何事情)应用程序服务应该是单例的,并且由于 Node 模块保证只有 1 个“实例”,所以在我看来这是一个合适的选择(模块可以简单地实现'单身')

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

4

1 回答 1

8

查看Node 的模块缓存注意事项,了解模块的“单一性”会崩溃的情况。

如果您总是在单个包中使用文件路径(以 、 或 开头)引用您的单例模块,./那么../您是安全的。/

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

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

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

The same npm installing the same app could result in either directory structure depending on the versions of the dependencies. Node's folders doc has the details.

于 2012-11-27T05:27:12.073 回答