Atualizar cadeia de modelos no padrão acionado por eventos

5

Qual é o nome formal para este cenário de problema específico em uma arquitetura orientada a eventos e quais são as abordagens comuns para lidar com isso: Após uma ação ou evento ser enviado, vários assinantes serão executados em ordem. Mas depois que o primeiro assinante é executado, ele aciona uma nova ação que também possui vários assinantes, e assim por diante. Em algum momento, algum assinante exigirá dados de outros modelos que dependem da primeira ação, mas ainda não foram atualizados. Veja o diagrama:

    
por Paulo Madroñero 07.12.2016 / 17:47
fonte

2 respostas

1

como Dunk sugerido, a maneira como resolvi isso foi redesenhando e usando uma terceira entidade para lidar com o evento inicial e, em seguida, para assegurar que o sequenciamento esteja na ordem correta.

A ferramenta escolhida foi Ramais Reativos (Rx) . Eu acho que a descrição do Microsoft msdn é muito precisa:

Reactive Extensions (Rx) is a library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators.

Então o resultado é algo assim:

Eu não vou me aprofundar no rx, mas basicamente nós tratamos cada emissor de evento como um fluxo de dados. Esse fluxo de dados geralmente é tratado como uma matriz estática. Podemos fazer o que quisermos com os fluxos e, se construirmos uma cadeia de fluxos, teremos sempre um fluxo atualizado no final da cadeia.

Então, os profissionais dessa abordagem são:

  • Você aprenderá um novo paradigma de programação (se ainda não souber)
  • Você não precisa reinventar a roda fazendo um sistema complexo de gerenciamento de eventos.
  • Depois de dominá-lo, será muito fácil lidar com grandes fluxos de eventos.

Os contras:

  • Você tem que refatorar. Isso pode ser feito parcialmente, mas você precisará de um bom entendimento para fazê-lo.
  • Realmente, curva de aprendizado REALMENTE íngreme (pelo menos para mim foi). Eu nunca trabalhei com programação reativa ou funcional, então pela primeira vez levei um tempo para que eu e minha equipe trocássemos nossos cérebros pelo pensamento funcional.
  • Um pouco difícil de depurar e teste de unidade, mas não impossível.
por 20.02.2017 / 10:54
fonte
0

O nome formal na UML é "junção de atividades (simultâneas)", consulte " Diagrama de atividades ", ou mais aqui detalhado .

Uma possível abordagem para lidar com isso é passar um ID ou token exclusivo da origem do evento inicial até a cadeia, portanto, o "nó de junção" pode comparar esse ID para os eventos de entrada e associar os estados corretos por IDs correspondentes. Em cenários do mundo real, as coisas podem se tornar mais complexas (por exemplo, cenários de timeout, buffer de eventos, o nó de junção pode reagir em entradas parciais, o que você imaginar).

    
por 07.12.2016 / 23:06
fonte