Desventaja de PubSub

| Última modificación: 1 de julio de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

¿Conoces qué es y cuál es la principal desventaja de PubSub? PubSub es uno de los patrones de diseño más importantes del mundo del desarrollo de software. Con él, podemos comunicar las distintas piezas de nuestro proyecto a partir de un tercer elemento en el que se guardan todos los eventos comunicables. A este elemento se le conoce como event bus. Aunque este patrón es muy poderoso y usado, también tiene sus desventajas. En este post, te contaremos cuál es la principal desventaja de PubSub para que la conozcas antes de usar este patrón.

Antes de empezar con las desventajas de PubSub

Antes de contarte cuál es la desventaja de PubSub, creemos que es fundamental que conozcas este patrón en profundidad.

Para conocer más sobre el concepto, te recomendamos leer nuestros posts sobre PubSub vs inyección de dependencias y sobre las ventajas del patrón PubSub.

Si lo que estás buscando es conocer más sobre la ejecución de este patrón en tus líneas de código, puedes leer nuestros posts sobre implementar patrón PubSub con clase en JavaScript, emitir y escuchar mensajes con PubSub y controlar mensajes con PubSub.

Ahora que tienes estos conceptos claros, te explicaremos cuál es la desventaja de PubSub.

¿Cuál es la desventaja de PubSub?

La desventaja de PubSub se encuentra en el código que hemos utilizado en nuestro post sobre implementar este patrón usando clases. En realidad, puedes ver con mayor detalle esta desventaja en nuestro post sobre los métodos suscribe y publish en PubSub. Allí, comprobarás que el método suscribe tiene una sección con la que determinamos un método para la eliminación del evento escuchado. Esta sección se ve como las siguientes líneas de código:

return {
remove: function ( ) {
delete this.topics [topic] [index];
},
};
}

La razón detrás de esta sección de código es la desventaja de PubSub. Aunque este patrón es muy flexible y nos permite una gran comunicación entre piezas, al final, si generamos muchas suscripciones a distintos eventos, podemos crearnos problemas en términos de gestión de memoria.

Al trabajar con un array bidimensional, el método de suscripción está generando múltiples listados, unos dentro de otros. Es decir, dentro del array se están sumando piezas que escuchan (suscribers) y piezas que comunican (publishers). Esto se irá acumulando cuantas más piezas se unan a nuestro event bus.

Debido a este problema de acumulación, la desventaja de PubSub es que dentro del método de suscripción deberemos gestionar la desuscripción de un evento. Es decir, el dejar de escuchar un evento. ¿Para qué? Pues para liberar lo que se haya acumulado en ese array bidimensional que crea el método.

Entonces, la desventaja de PubSub es que todo el mapa de eventos escuchados y publicados se está guardando en memoria. Por ello, aunque cada línea de suscriber y publisher es gratis, requiere de una gestión adecuada para evitar colapsos operacionales.

A diferencia de otros patrones, la desventaja del patrón PubSub es fácil de gestionar. Es por esto que nuestro código a implementar gestiona desde el inicio la eliminación de suscripciones en tan solo cinco líneas de código, usando el método remove. Para ejecutar esta eliminación, basta con llamar a la clase pubsub y al método suscribe. Luego, dentro de suscribe, se llama al evento del que queremos desuscribirnos y se aplica el método remove. A continuación, te mostramos un ejemplo:

pubSub.suscribe (pubSub.TOPICS.SHOW_ERROR_NOTIFICATION).remove ( )

A pesar de esta desventaja, el patrón PubSub sigue siendo uno de los más fuertes. Es, incluso, la solución a las falencias de otros patrones, como es la desventaja del patrón de inyección de dependencias. PubSub también se usa en la implementación de librerías y herramientas para el desarrollo de software.

Una de estas herramientas es gestionada por Google, por lo que puedes conocer más sobre ella en la documentación Pub/Sub en Google Cloud o en nuestro post sobre qué es PubSub.

Ahora que sabes cuál es la desventaja de PubSub, ¡te invitamos a probar este y otros patrones en tus propios proyectos! Si quieres seguir aprendiendo sobre la creación y desarrollo de todo tipo de proyectos web, te recomendamos nuestro Desarrollo Web Full Stack Bootcamp, un espacio de formación intensiva donde aprenderás a desarrollar líneas de código con lenguajes, patrones y herramientas fundamentales para este ejercicio. ¿Quieres seguir aprendiendo con nosotros? ¡Inscríbete ya y destaca en el mundo IT!

Alberto Casero

Alberto Casero es CTO en Watium, Fundador de Kas Factory & Coordinador del Bootcamp en Desarrollo Web.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Desarrollo Web

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado