上一页:我读过NodeJS 模块与类,但这更具体。
作为 Node 中一些重构的一部分,我有几个应用程序服务(在 DDD 术语中),它们在技术上被实现为 Node 模块。
因为(在 DDD 世界中,可能是其他任何事情)应用程序服务应该是单例的,并且由于 Node 模块保证只有 1 个“实例”,所以在我看来这是一个合适的选择(模块可以简单地实现'单身')
除了纯粹的观点之外,有什么理由我应该考虑将这些应用程序服务重构为适当的单例类(只要在 javascript 中可以保证“单例”)?
上一页:我读过NodeJS 模块与类,但这更具体。
作为 Node 中一些重构的一部分,我有几个应用程序服务(在 DDD 术语中),它们在技术上被实现为 Node 模块。
因为(在 DDD 世界中,可能是其他任何事情)应用程序服务应该是单例的,并且由于 Node 模块保证只有 1 个“实例”,所以在我看来这是一个合适的选择(模块可以简单地实现'单身')
除了纯粹的观点之外,有什么理由我应该考虑将这些应用程序服务重构为适当的单例类(只要在 javascript 中可以保证“单例”)?
查看Node 的模块缓存注意事项,了解模块的“单一性”会崩溃的情况。
如果您总是在单个包中使用文件路径(以 、 或 开头)引用您的单例模块,./
那么../
您是安全的。/
如果您的服务被包装在一个包中以供其他模块使用,那么您最终可能会得到多个单例实例。
假设我们发布了这个甜蜜的服务库:
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
The same npm install
ing the same app
could result in either directory structure depending on the versions of the dependencies. Node's folders doc has the details.