¿En qué consiste la modularización del código?
El patrón observador es utilizado comúnmente para modularizar código. Un típico uso es separar la definición de la clase del evento emisor y de la emisión del evento en su propio módulo, pero permitir a los observadores ser definidos en el programa principal. Esto nos permite personalizar el comportamiento del modulo sin tener que cambiar el código del mismo.
Ejemplo del uso del patrón observador en Nodejs
En job.js utilizamos un modulo genérico job que emite un evento complete después de 1000 milisegundos. Sin embargo dentro de worker podemos personalizar el manejador de eventos del observador para que realice lo que queramos que realice cuando este complete su ejecución.
- job.js
const EventEmmiter = require('events')
const Job extends EventEmmiter {
constructor(args){
super(args)
this.on("start", () => {
this.process()
})
}
process(){
setTimeout(() => {
this.emit("complete", { completionTime: new Date() })
}, 1000)
}
}
module.exports = Job
- worker.js
const Job = require("./job.js");
const job = new Job();
job.on("complete", ({ completionTime }) => {
console.log("El evento se completo en", completionTime);
});
job.emit("start");
Cuando ejecutamos
node worker.jsla lógica personalizada perteneciente al eventocompletesera ejecutada desdeworker.js. De esta forma podemos mantener el modulojob.jsflexible. No hay necesidad de preparar ninguna lógica para el eventocomplete. El consumidor del modulo puede tener múltiples eventos en diferentes secciones del código. Estos pueden ser invocados múltiples ocasiones utilizando.ono una sola ocasión mediante.once.