Padrão de publicar / assinar Javascript

O padrão Publicar / Assinar (PubSub) é uma variação do padrão Observer. Ele permite que você desacople e remova dependências entre seus objetos, o que pode tornar seus objetos mais fáceis de reutilizar.

Se você já fez eventos personalizados em javascript ou jQuery, está familiarizado com o padrão, mas provavelmente não percebeu. Cada vez que você vincula um evento usando os métodos on / bind / live do jQuery, você está implementando o padrão Observer. O padrão PubSub é apenas uma variação do padrão Observer. O Observer requer que o objeto que está recebendo as notificações de eventos também faça a inscrição. Portanto, isso cria uma dependência porque o Observer tem que lidar com assinaturas e notificações. O padrão PubSub permite que um objeto simplesmente se inscreva em um evento usando um “tópico”. Outro objeto pode então “publicar” o tópico que dispara o evento inscrito.

O PubSub fica entre os objetos. Assim, vários objetos podem publicar um único tópico. Esse desacoplamento é uma grande vantagem do padrão PubSub porque os módulos podem interagir uns com os outros sem conhecer as especificações uns dos outros. Isso também é uma desvantagem. Quando você publica um tópico, deve assumir que há uma assinatura no final para ouvir. Se não houver, você não receberá nenhuma notificação de que algo quebrou. Ele falhará silenciosamente porque nenhum erro realmente aconteceu.

Ao criar suas assinaturas, use uma variável para o seu tópico. Dessa forma, quando você cometer um erro de digitação, o javascript irá informá-lo disso. Se você usar apenas uma string, quando cometer um erro de digitação, seu evento de publicação falhará silenciosamente porque o javascript não se importa se não houver um evento de inscrição para o tópico especificado.

var topic = 'myTopic';
$
.subscribe(myTopic, callback);
$
.subscribe('anotherTopic', callback);

// this will through an error
$
.publish(topc, 'hello world');
// this will fail but no error will happen
$
.publish('anothrTopic', 'hello world');

Use o padrão Observer ao observar eventos no mesmo objeto e use PubSub quando precisar que outros objetos chamem seus métodos em seu objeto.

A biblioteca que gosto de usar é jquery-tiny-pubsub . Ele se conecta ao sistema de eventos do jQuery para que você saiba que é robusto para qualquer coisa que você queira fazer. A única desvantagem é que, como é orientado por eventos, o primeiro argumento que sua função de evento recebe é o próprio evento. Portanto, você precisará ignorar o primeiro argumento em seus retornos de chamada assinados. Você pode usar esse primeiro argumento para descobrir o nome do evento inscrito que foi chamado e fazer alguma ramificação lógica. Portanto, uma única função pode ser usada para muitos eventos inscritos.

Baixe uma demonstração simples para ver este padrão aplicado.