¿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.js
la lógica personalizada perteneciente al eventocomplete
sera ejecutada desdeworker.js
. De esta forma podemos mantener el modulojob.js
flexible. 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.on
o una sola ocasión mediante.once
.