Eventos modulares en Node.js: Mejora la estructura de tu código

Eventos modulares en Node.js: Mejora la estructura de tu código

¿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 evento complete sera ejecutada desde worker.js. De esta forma podemos mantener el modulo job.js flexible. No hay necesidad de preparar ninguna lógica para el evento complete. 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.