【问题标题】:nodejs: Node modules vs singleton classesnodejs:节点模块与单例类
【发布时间】:2012-07-29 13:21:04
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    查看Node's module caching caveats 了解模块的“单一性”会崩溃的情况。

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

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

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

    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 有详细信息。

    【讨论】:

      猜你喜欢
      • 2011-10-18
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 2018-01-16
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多