Pergunta

Você tem um Observable/Listenable orientado a pull que notifica Observadores/Listeners quando algum estado muda.

O estado consiste em mais de uma porção de dados, e alguns de seus Observadores/Ouvintes não se importam com todo o estado.

Você geralmente prefere notificar todos os Observadores/Ouvintes de qualquer maneira e permitir que eles ignorem as notificações quando nada que lhes interessa mudou?

Ou você geralmente prefere um Observável separado para cada "pepita" de dados, para que seus Observadores/Ouvintes recebam apenas as notificações às quais precisam responder?

Depende da situação?

Você tem alguma opinião geral sobre a granularidade de seus Observáveis/Listenables?

Foi útil?

Solução

Você está negociando custos de manutenção com custos de entrega.Se você tiver definições de eventos refinadas, cada observador obtém exatamente o que precisa, então você não paga pela sobrecarga de entrega aos observadores que estão desinteressados ​​- mas isso economiza custos porque cada novo tipo de pepita precisa ser adicionado ao sistema de alguma forma.

Em sistemas de mensagens Pub/Sub onde os custos de entrega são relativamente altos (mensagens fluindo pelas redes), normalmente é necessário prestar muita atenção às definições do tópico.Uma hierarquia de tópicos cuidadosamente projetada costuma ser útil.Então obtemos padrões como

  sport
       football
              england 
                    premier
                    champioship
              scotland
                    spl
              france
                    ...
       cricket
              australia
                    ...
              india
              sri lanka

Permitindo assim assinaturas em vários níveis.Você pode assinar todos os esportes ou (como algumas pessoas podem) até

    sport/football/england/championship/watford

Outras dicas

Bem como uma regra geral, as interfaces especializadas fazem mais do que danos, então eu definitivamente implementaria mais do que menos.

Obviamente, isso chama a situação. Somente se especialize dessa maneira, se for necessário, e da sua situação, parece assim, caso contrário, é como informar os fabricantes do cereal que o trigo precisa de colheita. Simplesmente não se aplica.

Se eu tivesse que fazer isso, provavelmente criaria uma classe observável que teria um evento para cada tipo de pepita e um evento global para qualquer pepita. Meio como um caminho intermediário.

Não é só manutenção.Quanto mais específica for a interface entre Observáveis ​​e Observadores, mais acoplados eles se tornam.

O livro Gang Of Four tem uma seção para esse mesmo problema, e eles desaconselham os modelos push e pull.O modelo pull pode ser ineficiente, o modelo push pode não ser suficientemente reutilizável.

Então, depende muito da situação.Tenho tendência a ir um pouco acima do modelo pull.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top