Gerenciamento de estado — Mobx
Depois de tantas opções de gerenciamento de estado, porquê conhecer outro? Será que os anteriores não são bons? Será que o Mobx é melhor? Estas e mais perguntas podem estar surgindo em seu cérebro, mas como desenvolvedores (e não só) sabemos que em termos de soluções para um problema/situação depende muito do contexto a que o mesmo se encontra, posto isto, é importante notar a importância de cada uma das opções previamente definidas.
Este artigo faz parte de uma série de 5 artigos que vão abordar vários padrões de gerenciamento de estado.
- State Management — Introdução
- State Management — Provider
- State Management — Bloc
- State Management — Redux
- State Management — Mobx (este artigo)
Mobx
O Mobx é uma biblioteca de gerenciamento de estado tida como “técnica de gerenciamento de estado sólida” por seu desempenho ‘extraordinário’ em projectos de larga escala.
O MobX é apenas uma biblioteca de gerenciamento de estado que simplifica a conexão dos dados reativos do seu aplicativo com a interface do usuário.
O Mobx permite aos desenvolvedores preocuparem-se menos com o link entre a interface do utilizador (UI) e a lógica da aplicação através de um recurso para gerar uma classe que faz essa ligação, deixando assim ao desenvolvedor o trabalho de melhorar sua lógica de negócio e UI.
Para que este conceito seja prático o Mobx é constituído de conceitos como Observables, Actions, Computed Observables e Observer Widgets.
- Observables ou ‘geradores de eventos’ são variáveis responsáveis por armazenar o estado reactivo de nossa aplicação. Os observables podem ser de vários tipos, temos os genéricos, temos os de suporte a objectos como Lists, Set ou Maps, ObservableFuture e o ObservableStream.
- Actions ou mutadores são funções que definem como deve ser actualizado o estado da aplicação.
- Computed Observables são variáveis dependentes dos observables e são ‘acionadas’ quando os observables mudam seu estado.
- Observer Widgets são widgets especiais que comportam-se como listeners de modo a fazer sentir a mudança do lado da UI de acordo com o estado do observable respectivo.
Para perceber melhor estes conceitos recorramos ao exemplo padrão desta série: Imaginemos o cenário onde temos o guarda (observables) que estão preparados a receber qualquer movimento e preparar uma reacção de acordo com o acontecido, temos nossa secretária que aguarda ansiosamente para que seja notificada de qualquer alteração de modo a proceder com uma acção (action), imaginemos uma situação onde temos mais uma camada de secretários dos executivos no último andar com o objectivo de ajudar na agenda apenas dos executivos, porém, dependem da recepção para realizar algumas actividades como receber seus convidados para reuniões do executivo (computed observable) e por fim os departamentos recebem a notícia de recepção de visitas e organizam-se de acordo (observable widgets).
O mobx é realmente simples, contudo tem mais conceitos que não foram abordados aqui e que estão disponíveis na documentação deste pacote.
Como implementar o Mobx
Para poder usar o Mobx, incluindo o processo de auto-geração de código, é necessário seguir duas abordagens, uma que é colocar as dependências do projecto e outra que são as dependências de dev, que são executadas em runtime.
Na Prática
Para aceder às mudanças no mobx não se recorre a nenhum widget especial, se não os conceitos de Store que ele mesmo aplica pelo nosso ficheiro CalcConrtrollerBase para o auto-gerado.
Este exemplo representa uma calculadora (mais “somadora” rsrsrsr) que escuta a mudanças constantes dos textFields, sem necessidade de um cotroller convencional e uma lógica embutida directo na UI. A entrega destes dados na UI é completamente abstracta!
Nota: Pode contribuir o projecto completo no meu repositório do github.
Espero que tenha aprendido com este artigo e que se tenha divertido enquanto lia.
Obrigado por acompanhar até ao fim e espero por você nos próximos artigos.
Para questões e sugestões esteja a vontade para tal nos comentários, email igorlsambo1999@gmail.com ou twitter @lsambo02.
Obrigado e até ao próximo artigo!!!