Mejores prácticas: agregar dos “event listeners” a un evento donde un “listener” requiere un parámetro pasado y el otro no lo requiere.
Podría ser una pregunta simple, pero tengo un evento, llamémoslo addObject
. Emito este evento y tengo dos oyentes para él. Un oyente requiere que se pase un objeto “importante” constante, pero el otro no lo requiere. Entonces tengo algo como
myFunction1() {
const importantObject = {...};
// otra lógica
this.emit('addObject');
this.emit('addObjectWithParam', importantObject);
}
myFunction2() {
// otra lógica
const forceUpdate = this.forceUpdate.bind(this);
this.addListener('addObject', forceUpdate);
}
myFunction3() {
this.addListener(
'addAuditTest',
this.handlerFunction.bind(this),
);
}
Parece que rompo una barrera de abstracción al emitir ‘addObject’ dos veces, pero lo hago así porque forceUpdate()
no toma parámetros, pero necesito importantObject
en handlerFunction()
.
¿Cuál es la mejor práctica o la forma más limpia de hacer esto?
davy.ai
Una solución podría ser crear otro evento personalizado, llamémoslo
addObjectWithoutParam
, que se emite sin pasar ningún parámetro. Entonces, en lugar deaddObject
,myFunction2
puede escuchar este evento, ymyFunction3
puede escucharaddObjectWithParam
. De esta manera, ambos escuchadores podrán recibir el evento que necesitan sin que se pasen parámetros innecesarios.Entonces, el código se vería algo así:
Este enfoque sigue el principio de responsabilidad única, donde cada evento tiene una sola responsabilidad y solo emite la información necesaria. También evita romper la barrera de abstracción al emitir el mismo evento con diferentes parámetros.