2012-07-31 20 views
5

PRE: He leído NodeJS modules vs classes pero esto es más específico.nodejs: módulos de nodo frente a clases singleton

Como parte de algunas refactorizaciones en el nodo, tengo un par de servicios de aplicaciones (en terminología DDD) que se implementan técnicamente como módulos de nodo.

Dado que (en un DDD-world, probablemente en cualquier otro caso) Application Services debería ser singletons y como los módulos de Node están garantizados para ser 1 'instancia' solamente, me parece que esto es una buena opción (módulos implementan trivialmente la 'singletonness')

¿Hay alguna razón por la que deba considerar la refactorización de estos servicios de aplicaciones como clases singleton correctas (siempre que se garantice la 'singletonness' en JavaScript de todos modos), aparte del punto de vista purista?

Respuesta

6

Consulte Node's module caching caveats para los casos en que la 'singletoness' de los módulos se descompondrá.

Si siempre hace referencia a su módulo singleton con rutas de archivos (comenzando con ./, ../, o /) dentro de un solo paquete, está seguro.

Si su servicio está envuelto en un paquete para ser utilizado por otros módulos, puede terminar con varias instancias de su singleton.

Di publicamos esta biblioteca servicio de dulce:

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

service.js: 
    var singleton = {}; 
    module.exports = singleton; 

En esta aplicación, server.js y other.js conseguirá diferentes instancias de nuestro servicio:

app/ 
⌞ server.js 
⌞ node_modules/ 
    ⌞ service-lib/ 
    ⌞ service.js 
    ⌞ other-package/ 
    ⌞ other.js 
    ⌞ node_modules/ 
     ⌞ service-lib/ 
     ⌞ service.js 

Si bien esta aplicación cuota de una instancia:

app/ 
⌞ server.js 
⌞ node_modules/ 
    ⌞ service-lib/ 
     ⌞ service.js 
    ⌞ other-package/ 
     ⌞ other.js 

El mismo npm install con el mismo app podría dar como resultado una estructura de directorios dependiendo de las versiones de las dependencias. El nodo folders doc tiene los detalles.

Cuestiones relacionadas