Diferença entre os patterns: Observer x Publish Subscribe

Adoro conversar, se tem uma coisa que gosto de fazer é falar e ouvir… e em uma dessas conversas recentes surgiu a discussão sobre como explicar mais rapidamente as diferenças entre os padrões de Observables e PubSub.

Resolvi então traduzir o fio da conversa em um post aqui, não vou entrar em todos os detalhes, mas apenas tentar ser mais lúcido e prático nas definições.

Então vamos lá!

Observer

Image for post

O padrão Observer é um padrão de design comportamental em que um objeto, chamado de Subject, permite definir uma ou mais inscrições dos chamados Observers, e os notifica automaticamente sobre quaisquer mudanças de estado, geralmente chamando um de seus métodos.

Vamos a um exemplo do mundo real:

Você trabalha como vendedor em uma loja de calçados, porém a loja está sempre cheia e todos os dias anota diversos contatos por itens que estão em falta em um bloquinho. No dia seguinte ao verificar que um dos calçados já encontra-se em estoque e claro, para não perder sua comissão de venda, resolve ligar para todos todos os contatos do dia específico de procura daquele item que mudou de status.

Image for post
Ilustração do exemplo do vendedor.

Agora o exemplo como deve ser:

Image for post
Observer Design Pattern

Simples não é? 🙂

Publish Subscriber

Image for post

É um padrão para troca de menssagens onde quem as envia são chamados de Publishers, porém eles não enviam as mensagens diretamente para quem os recebe, os Subscribers.

Os publishers não tem conhecimento dos subscribers, e vice versa.. mas então como eles se comunicam? Eles expressam interesses(intents) de envios, e interesses em recepções.

Mas se eles não se conhecem, como é feita a comunicação? Há outro componente, o Message Broker, e ele sim é conhecido tanto pelo publisher quanto pelo subscriber. O publish enviará a mensagem ao message broker e ele por sua vez filtrará e transmitirá a mensagem ao(s) subscriber(s) correto(s).

Image for post
PubSub Pattern

Existem vários message brokers disponíveis, no exemplo ilustrativo a área em cinza seria a sua representação, lembrando que são bem mais complexos que isso, é claro.

Obrigado

O post foi curto e rápido como previsto, vejo vocês em breve.

Published by Ivan Marrêta

Software Engineer

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: