TeqFW: fundamentos de eventos

Fecha de publicación: 2022-01-05

JavaScript encaja bien con programación asíncrona, donde los eventos son centrales. Este artículo presenta cómo Tequila Framework utiliza eventos para coordinar trabajo dentro de navegador o servidor y a través de la frontera entre ambos.

Qué es un evento

Un evento es un cambio significativo de estado, por ejemplo «la persona usuaria se ha autenticado». Lleva datos —como un identificador—, nace de una acción y puede provocar otras, como cargar el perfil.

En el caso más simple hay dos objetos funcionales y uno de datos: un Event Producer cambia estado y emite un Event Message; uno o varios Event Handlers reaccionan. El evento tiene tipo, como onClick, y un mensaje con datos relacionados, como MouseEvent.

Los manejadores reaccionan de forma asíncrona, pueden cambiar el estado y emitir nuevos eventos. Esto hace la aplicación más flexible que una cadena de llamadas síncronas, pero exige disciplina y observabilidad.

Eventos locales y transfronterizos

Una aplicación Teq suele tener frontend en navegador y backend Node.js. Si productor y manejador se ejecutan en el mismo proceso, el evento es local. Si están en lados opuestos, cruza la frontera.

Los mensajes transfronterizos viajan por Internet como JSON. Sus datos deben serializarse y deserializarse sin pérdida. Un mensaje local no sale del proceso y no tiene esa limitación de transporte.

Nombres de evento

Cada tipo debe ser único en la aplicación. Los namespaces Teq permiten que el nombre del módulo ES sea un identificador natural:

El módulo ES encapsula nombre y forma DTO del mensaje. Así el contrato queda explícito y puede reutilizarse a ambos lados.

Eventos locales

Un productor local permite publicación y suscripción:

emit(eventName, message) {}
subscribe(eventName, handler) {}
unsubscribe(subscription) {}

Quien se suscribe indica qué evento necesita y aporta un manejador. Cuando cambia el estado, el productor envía el mensaje.

Como ambas partes están en frontend o ambas en backend, este caso es comparativamente simple.

Eventos transfronterizos

Cuando el productor está en navegador y el manejador en servidor —o al revés— una aplicación móvil tiene entre ambos un canal inestable.

El productor envía mensajes a una cola que vigila el canal y entrega cuando puede. En el otro lado, un representante o «embajada» permite que manejadores locales se suscriban a eventos remotos. Al recibir un mensaje de red, lo enruta al manejador adecuado. El principio es igual en ambos sentidos.

En producción también hay que definir identidad, orden, reintentos y deduplicación; una cola por sí sola no garantiza entrega exactamente una vez.

Resumen

La arquitectura dirigida por eventos se adapta a la naturaleza asíncrona de JavaScript y a entornos cambiantes. Su coste es un flujo menos lineal. Por ello necesita logging y trazabilidad intencionales en cliente y servidor, para entender qué ocurrió y recuperarse de fallos.