2012-03-27 29 views
9

No puedo entender lo que se considera una buena y mala práctica al escribir un módulo en node.js. Algunos módulos parecen utilizar una gran cantidad de las exportaciones, mientras que otro uso sólo uno, etc.¿Qué es una buena práctica al escribir un módulo node.js

Ejemplo:

var self; 
var mymodule = function() { 
    self = this; 
    this.value1 = something; 
    this.value2 = somethingElse; 
}; 
module.exports.init = function() { 
    return new mymodule(); 
}; 

mymodule.prototype.functionalityType1 = { 
    someFunction: function(callback) { 
     var a = self.value1; 
     anotherfunction(a, callback); 
    }, 
}; 
mymodule.prototype.functionalityType2 = { 
    someFunction: function(callback) { 
     var a = self.value2; 
     anotherfunction(a, callback); 
    }, 
}; 

var anotherfunction = function(v, callback) { 
    // do stuff with v 
    callback(result); 
}; 

Cada uno de los prototipos contendría más de una función, evidentemente.

¿Sería algo así como una buena práctica?

Respuesta

15

Realmente depende del tipo de módulo que está escribiendo. La exportación de múltiples funciones funciona bien para los módulos de utilidad que tienen múltiples métodos pero poco o ningún estado interno para administrar. Piense algo así como el módulo fs (sistema de archivos). Hay una serie de métodos de sistema de archivos, pero casi todos son independientes y no hay un estado compartido.

Si está creando un módulo stateful con múltiples métodos que operan en estado, entonces probablemente solo deba exportar un constructor y permitir que el cliente cree una instancia de ese objeto que pueda administrar. Un ejemplo de esto es el módulo http que le permite crear un servidor, y ese servidor tiene métodos que afectan su estado interno.

Si necesita tener más de una instancia de un objeto de un módulo, entonces realmente no tiene más opción que exportar una función que devuelve una instancia del objeto.

No es tan diferente de los frameworks como .NET donde tienes clases de sistema de archivos (System.IO) que tienen métodos estáticos para operaciones independientes como verificar que existe un directorio, o leer el contenido de un archivo y luego tienen instancia clases para clases que mantienen estado.

Cuestiones relacionadas