O MVC e o Flux são arquiteturas de desenvolvimento de software populares por prezarem a separação das responsabilidades em uma aplicação, buscando isolar a interface da lógica de negócio.
Embora ambas compartilhem esse princípio, elas também apresentam diferenças na forma de aplicar e estruturar o fluxo de dados e é isso que será abordado nessa publicação.
MVC
Começando com a arquitetura mais velha dentre as duas, o MVC foi desenvolvido para criar um padrão de arquitetura que separasse a aplicação em camadas reduzindo a dependência entre interface, lógica e controle.
As camadas em questão são:
- Model: É o Business Object Model (Objeto Modelo do Negócio). Sua responsabilidade é gerenciar e controlar a forma como os dados se comportam por meio das funções lógicas se comportam. Ele é o detentor dos dados e recebe as informações do Controller.
- Controller: Camada responsável por intermediar as requisições enviadas pelo View com as respostas fornecidas pelo Model, processando os dados e repassando para outras camadas. De forma simplista, ele controla a comunicação entre os dados e a interação do usuário.
- View: Camada responsável por apresentar as informações de forma visual ao usuário e enviar as requisições para o Controller. Então quando uma interação acontece, a interface, ou seja, a View, irá se comunicar com o Controller e este vai enviar os dados para o Model que irá realizar as operações necessárias para atualizar o estado da aplicação, assim o Model pode enviar a resposta para o Controller para que ele atualize a View com as novas informações ou pode tamém se comunicar diretamente com a View. Assim o fluxo de dados é bidirecional, pois a View pode receber atualizações tanto do Model quanto do Controller.
Problemas ao escalar com o MVC e o surgimento do Flux
O Flux foi desenvolvido pelo Facebook com a intenção de ser uma arquitetura que pudesse compensar os problemas que surgem quando se tenta escalar aplicações grandes usando o padrão MVC em interfaces altamente interativas.
O fluxo bidirecional do MVC em grandes aplicações criavam caminhos cruzados de atualizações e assim, geravam complexidade e imprevisibilidade, tornando difícil entender quem mudou o quê na aplicação e podendo surgir problemas de sincronização de estado.
Então o Flux apresenta um fluxo de dados unidirecional, facilitando o rastreamento e manutenção em aplicações complexas.
Entendo o Flux
Como vimos, o Flux é uma arquitetura de desenvolvimento de software que divide a aplicação em camadas e cria um fluxo unidirecional.
As camadas em questão são as seguintes:
- Stores: Responsável por gerenciar o estado da aplicação, ela é atualizada cada vez que uma ação é realizada.
- Dispatcher: Objeto que gerencia as actions que entram no sistema, quando uma ação surge, ele passa essa ação para os stores registrados.
- View: É o componente de interface do usuário, ele é responsável por renderizar a UI e lidar comas interações do usuário. Ele sofrerá uma re-renderização a cada vez que o Store muda de estado. Nesse modelo, a interação do usuário gera um evento, uma action, e esta vai despachar o evento para modificar os dados, essas alterações irão mudar o store de dados e por fim este irá enviar um evento de atualização para a View. O fluxo é unidirecional pois o dispatcher garante que todas as actions passem por ele e a View escuta somente a Store para poder se atualizar.
Principais diferenças
MVC | Flux |
---|---|
A view é atualizada quando o Model Muda | A view é atualizada quando a Store muda |
View pode ser atualizada pelo Controller e pelo Model | View atualizada somente quando a Store mudar |
Múltiplos pontos de modificação | Caminho único de atualização |
Conclusão
Cada uma dessas arquiteturas já se provarão ser eficientes e eficazes no desenvolvimento de software, ambas apresentam vantagens para o desenvolvedor e compartilham semelhanças. Entender as diferenças entre elas ajuda a escolher qual é a mais adequada conforme a complexidade da aplicação, garantindo um desenvolvimento claro, organizado e escalável.
Top comments (1)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.