Vuex a implementação da arquitetura flux de forma descomplicada

Juscilan Moreto
3 min readSep 19, 2016

Algumas ferramentas alcançam a eficiência pois foram desenvolvidas por quem domina o problema. Essa parece ser o caso da lib e do ecossistema Vue.js (vuejs.org), quando se tem um problema na organização da base de código de FrontEnd (HTML, CSS, JavaScript) busca-se soluções que podem minimizar esse problema, esse é o caso do conceito de WebComponents.

O cenário do problema em Grandes projetos:

Você começa a desenvolver sua aplicação baseada em componentes, cada componente com seu estado (seus dados), ela começa a ganhar robustez, mais e mais componentes, não tardará a necessidade de trocar esses dados entre os componentes. Uma forma eficaz de se fazer isso é emitir e capturar eventos. O problema dessa abordagem em aplicativos de larga escala é a capacidade de mantê-los, ou seja, entender os mais diversos fluxos, qual componente enviou oque para quem.

e se…

Tivéssemos um objeto global que centralizasse os estados dos componentes e outros componentes pudessem pegá-los a qualquer hora?

Tivéssemos um objeto global (STORE) que centralizasse os estados (STATES) dos componentes e em outros componentes pudessem pegá-los (GETTERS ) a qualquer hora?

Captou?

O conceito nos bastidores:

Diante desse cenário entra em cena o Flux, que é um conceito abstrato arquitetural desenvolvido pelo Facebook, que visa implementar essa troca de estado entre componentes através de fluxos.

Três elementos essenciais:

dispatch : Emissão por uma ação dentro de um componente ORIGEM.

store: Armazenamento centralizado do estado (state) dos componente e as mudanças (mutations)

getters: Recuperação do estado pelo componente DESTINO.

(Pronto, temos como trocar dados entre componentes de forma reativa.)

Outro coisa importante é que: Mutations e somente mutations deverá alterar states nas stores. Isso para o desenvolvedor ter o controle do fluxo de dados de forma centralizada e coesa.

Termos complicados né? Quando vi pela primeira vez também achei. Aqui o segredo para esclarecer as ideias é tentar esquecer por hora algumas arquiteturas como MVC por exemplo.

O ecossistema Vue.js trás ótimas implementações desse conceito, o mais popular é o Vuex.

Diagrama conceitual Vuex Fonte:http://vuex.vuejs.org/pt/intro.html

Além disso trás uma atração a mais, o Vue-dev-tools um plugin para o Chrome, tem uma aba dedicada ao Vuex, ele permite que você acompanhe em tempo real todas as mudanças de estado dos seus componentes, bem como o estado geral da Aplicação que é o conjunto de todos os estados dos componentes.

Portanto, Vuex é uma implementação elegante e simples que soluciona um problema de aplicações FrontEnd baseadas em WebComponents implementando o conceito de flux.

Aqui você encontra um repositório com projeto de exemplo:

Algumas referências sobre a comunidade:

Telegram (https://telegram.me/vuejsbrasil)

Vuejs Brasil (https://www.facebook.com/groups/vuejsbr/)

Slack (http://slack.vuejs-brasil.com.br/)

MeetupSP: http://www.meetup.com/pt-BR/VueJS-SP/

Join the Vue Community!

--

--