PRINCIPAIS CONCEITOS DO PADRÃO MVC (MODEL-VIEW-CONTROLLER)
Tags: mvc, designpattern, padroes
Published: 2020-07-10 19:14:08

Existem diversos padrões de arquitetura de software (design pattern) que podem ser aplicados para organizar o código de uma aplicação, e talvez o mais acessível deles seja o padrão MVC. Este padrão cria uma separação da implementação do software em camadas entre os dados da aplicação (model) e sua apresentação (view). Ações do usuário são interceptadas por um controller responsável em atualizar o modelo e refletir seu estado mais atual através de sua respectiva view.  Essa divisão em camadas torna mais fácil e define melhor as responsabilidades e proporciona uma independência. 

É altamente testável, pois quando se tem as camadas divididas onde cada parte está em  seu devido lugar e o desenvolvedor consegue testar cada parte de forma separada,  favorecendo o Desenvolvimento Dirigido por Testes (TDD). 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/7py33y398bt1zbahbp9b.png)

<strong>O que significa cada sigla do MVC (MODEL-VIEW-CONTROLLER)</strong>
O <strong>model</strong> seria o coração da aplicação, onde se tem a regra de negócio, entidades, aplicação do banco de dados, e tudo que pertença a aplicação em termo de regra de negócio e validação. 

A <strong>view</strong> onde temos a interface de comunicação com o usuário é responsável por renderizar a resposta da requisição seja ela em desktop ou web.  

A camada <strong>controller</strong> faz o controle do fluxo da aplicação, fazendo o intermédio de todo o fluxo a definir o que o usuário verá na tela. É a primeira camada que recebe requisição dentro do padrão MVC. 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/l70kh9s9ot3v12u0q2oo.png)

Quando é necessário acessar o banco de dados para obter resposta. 
<strong>Fluxo com dados:</strong>
 
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/s6lry3h9nlfwjftsjz73.png)

<strong>Como funciona?</strong>
O usuário em seu browser realiza uma requisição HTPP, que ao chegar ao controller que verifica e comunica ao model. O model realiza uma consulta ao banco de dados, retornando os dados requisitados para o mode, vale lembrar que essa parte do model é invisível ao usuário. O model retorna ao controller que tem o trabalho de renderizar a informação na view. A view retornará  um evento para o controller que devolverá a resposta HTPP para o browser onde o usuário poderá visualizar o que foi requerido. 

Caso não seja necessário acessar dados, a requisição não precisa passar pela camada model, pois a camada model que se liga ao banco de dados. 
<strong>Fluxo sem dados:</strong> 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/d26flx2yttu1idqyuf6i.png)

<strong>Implementação</strong> 
Isso depende da linguagem de programação que será utilizada e do contexto da aplicação. Normalmente haverá uma classe abstrata para cada um dos 3 elementos principais: Model, View e Controller. O programador desenvolve aplicações criando subclasses dessas classes abstratas onde cada aspecto do sistema vai ter seu model. Cada modelo terá 1 ou mais controladores e visões. 


<strong>Sugestão de leitura:</strong> 
Use a Cabeça! Padrões de Projetos (livro).