MVVM Em Ação — Prism Library ! EventAggregator
Fala galera,
Tudo beleza?
Que o prism é meu framework MVVM favorito, a maioria sabe.
Mas o que muitos não sabem é que ele te ajuda a não utilizar o polemico MessagingCenter, que causa mais discussão que politica no brasil :P .
Antes de iniciar , se você não conhece o Prism eu sugiro a leitura desse artigo : MVVM Em Ação — Prism Library ! Configurando o Prism .
Vamos la!
Event Aggregator
O prism nos fornece um incrivel recurso chamado Event Aggregator (O agregador de eventos) . Com ele eu consigo que Métodos/Ações e etc se comuniquem entre si, sem possuir uma referencia direta.
Em termos simples, você vai ter um evento assinado em que quando seja disparado o "Assinante" receba a notificação. Fica mais facil com a imagem abaixo :
Mas então porque eu não uso o MessagingCenter ? Simples, com o EventAggregator eu consigo escolher qual Thread vai executar o evento. Ou seja , não fico socando tudo na thread principal.
Mas e como eu utilizo?
Vamos ver !
Utilizando o Event Aggregator
Recentemente participei de uma live no Canal.net sobre Polly com meus amigos MVPS Renato Groffe, Milton Câmara e Luiz Carlos Faria e utilizei o EventAggregator para me notificar das interações do Retry do Polly.
A implementação é muito simples :
Primeiro devemos criar um evento que sera utilizado para notificação :
o PubSubEvent recebe um object, ou seja , você pode definir qual o tipo da sua mensagem.
Em seguida para utilizar precisamos declarar a interface IEventAggregator, que o prism nos ajuda instanciando via injeção de dependencia . Em seguida implementar a chamada do Evento :
No meu caso, estou utilizando o _eventAggregator.GetEvent<MessageSentEvent>().Publish(mensagem); para enviar a mensagem, toda vez que o Polly fizer um retry .
Warning : Se quiser saber mais sobre Polly, sugiro o artigo Everybody say about Polly
Este Publish avisara quem estiver assinando o evento que uma mensagem foi enviada.
Na minha ViewModel eu preciso definir quem vai receber o evento:
Warning : Você não é obrigado a utilizar na ViewModel, apenas estou utilizando no exemplo. Os Eventos podem ser assinados onde você precisar.
Bem simples em? Agora toda vez que o retry do Polly for executado a tela vai ser atualizada :
É um exemplo simples, mas da para ver como o EventAggregator funciona.
Se você quiser ver o criador do Prism (Brian Lagunas) falando mais sobre EventAggregator (Em ingles) , abaixo tem um video do canal dele :
Caso queira ver Documentação oficial do EventAggregator no Prism : Clique Aqui.
Caso queira baixar o código utilizado no Exemplo: Clique aqui.
Quer ver outros artigos sobre Xamarin ? Clique aqui.
Espero ter ajudado!
Aquele abraço!