mediator.js fue escrito por Jack Lawson para ayudarnos a resolver con mayor facilidad los problemas que surgen al programar una aplicación asincrónica. No sólo es muy útil y fiable (tuve la posibilidad de utilizar mediator en un proyecto de gran envergadura), sino que también es extremadamente liviano (1,12 kb) y no tiene dependencias con ninguna librería.
Imaginemos por un momento que estamos en un aeropuerto. Aviones aterrizan y despegan con total coordinación. Los vuelos de decenas de compañías en ese aeropuerto se encuentran organizados y sincronizados con los de otros aeropuertos en el resto del mundo.
La torre de control aéreo recibe información de todas partes y toma las decisiones que le son entregadas a los pilotos para que todo se realice sin inconvenientes. Esto es mediator.js, una pequeña clase JavaScript que centraliza la comunicación y nos permite crear canales por los cuales se puede enviar o recibir información, sin tener que preocuparnos por el sincronismo del código que escribamos.
Cómo utilizarla
La forma de uso es muy sencilla: se crea un canal de datos con un nombre a nuestra elección. Luego, podemos elegir que parte del código va a utilizar ese canal, indicando si vamos a enviar datos (publicando en el canal) o sólo nos prepararemos a “escuchar” (suscribiendonos al canal) la información que pueda llegar a través de ese medio.
Para lograr esto, mediator.js nos provee de 4 métodos básicos en su API:
- publish: nos permite publicar información en un canal determinado, sin tener que preocuparnos por quién se encargará de hacer llegar esa información a los suscriptores.
- subscribe: a simples rasgos nos permite decir a qué canal de información nos suscribiremos y qué elegimos hacer con lo que recibamos allí.
- remove: nos permite eliminar un canal de información, para romper el lazo entre quien publica y sus suscriptores
- once: nos permite suscribirnos a un canal de información pero, esta vez sólo recibirá datos por única vez. Luego eliminará su suscripción.
Ejemplo
Para entender mejor el funcionamiento, podemos ver el ejemplo que propone Jack Lawson en la web oficial de esta clase:
var mediator = new Mediator();
// Muestra un alert box con los datos cuando el mensaje es publicado en el canal // Subscribe retorna el objeto "Subscriber" mediator.subscribe("message", function(data){ alert(data); }); mediator.publish("message", "Hello, world");
// Otro ejemplo de uso, con objetos JS: mediator.subscribe("channel", function(data){ alert(data.Message); } mediator.publish("channel", { Message: "Hey!", From: "Jack" }); //alerts
Uso en el mundo real
Nosotros utilizamos esta clase para nuestro cliente DataFactory donde necesitamos procesar gran cantidad de estadísticas deportivas y mostrarlo en varias pantallas de una aplicación. Con mediator creamos un canal por incidencia (pases, tiros al arco, tiros libres, goles, etc), luego cada módulo que necesitaba esta información solo tenia que suscribirse al canal correspondiente, esperando que le lleguen los datos ya procesados.
Resumen
Finalmente podemos destacar que mediator.js no es sólo una herramienta muy útil para utilizar en un navegador (tanto como JavaScript nativo o cargándolo modularmente mediante RequireJS), ya que también es compatible con Node JS, (descargando por NPM el paquete mediator-js). Sin dudas este pequeño código de 1kb se merece un lugar en nuestros proyectos web.
Para más información recomendamos leer:
Escribir respuesta