O padrão MVC, que significa Model-View-Controller (Modelo-Visão-Controlador), é um Design Pattern criado para aprimorar o desenvolvimento de interfaces de comunicação com o usuário.
Foi uma das primeiras abordagens a descrever o conceito de separação de responsabilidades, onde cada letra da sigla representa um componente que possui apenas uma responsabilidade bem definida.
Relações entre os componentes:
- Modelo: é o componente que representa os dados da aplicação. Possui a responsabilidade de gerenciá-los e validá-los, de acordo com regras de negócio;
- Visão: é a representação gráfica dos dados manipulados pela aplicação. Sua única responsabilidade é a de feedback ao usuário;
- Controlador: situa-se entre os outros dois componentes, permitindo que os mesmos se comuniquem durante a execução da aplicação.
Após a divisão da aplicação nestes três componentes, é esperado que eles se comuniquem da seguinte maneira:
- O modelo gerencia os dados da aplicação recebendo inputs do controlador;
- A visão exibe os dados presentes em seu modelo;
- O controlador recebe os inputs do usuário e os direciona para o modelo.
Vantagens
Algumas das vantagens obtidas ao se aplicar o padrão MVC são:
- Alta coesão: a separação de componentes proposta pelo MVC permite o agrupamento de códigos similares de forma lógica;
- Baixo acoplamento: a própria natureza do padrão é reduzir o nível de acoplamento entre Modelo, Visão e Controladores;
- Facilidade de manutenção: em consequência da separação de responsabilidades torna o desenvolvimento futuro mais simples de ser compreendido;
- Testabilidade: com baixo acoplamento e separação de responsabilidades, cada componente pode ser testado de forma independente.
Desvantagens
Apesar de ser um padrão extremamente popular e utilizado, ele também possui algumas desvantagens:
- Navegabilidade: a navegação pode se tornar complexa e requer que os desenvolvedores se adaptem à decomposição que o padrão exige;
- Consistência de vários artefatos: a decomposição em três componentes pode causar dispersão, exigindo maior cuidado dos desenvolvedores para que a consistência seja mantida;
- Inflação de arquivos: à medida que o projeto cresce, a quantidade de arquivos também crescerá, podendo dificultar a navegação entre eles;
- Time to market: por exigir conhecimento mais avançado, o início do projeto será mais demorado até que a equipe inteira assimile as exigências do padrão.
Como funciona
Imagine que nos seja solicitado a implementação de um formulário de cadastro de clientes, e que após algum tempo de análise, chegamos à conclusão que será melhor aplicar o padrão MVC, baseado nas vantagens e desvantagens que ele possui.
Um bom começo seria a classe de Modelo:
|
|
A visão representa o GUI propriamente dito. No nosso caso, será o terminal:
|
|
O controlador recebe as instâncias do modelo e visão, e possui os métodos de manipulação de ambas as classes:
|
|
No método principal, demonstramos a utilização do padrão:
|
|
Pode parecer muito trabalho para algo simples e realmente é. Porém, se o objetivo for criar um projeto grande, com diversas interfaces, este padrão irá ajudar a manter a base de código estruturada de forma mais coesa e com com melhor índice de manutenibilidade.
Observações
É extremamente comum encontrar materiais descrevendo o padrão MVC como sendo um padrão arquitetural e isso é um erro. MVC é um padrão de projeto e é frequentemente confundido com arquitetura em camadas.
Um exemplo claro desse equívoco é encontrado em tutoriais que inserem códigos de acesso ao banco de dados em classes de Modelo. O MVC é um padrão destinado à criação de interfaces, o que numa arquitetura multi camadas significa a camada de apresentação.
Misturar códigos de camadas diferentes certamente irá gerar efeitos contrários aos propostos: aumento na complexidade do código, falta de coesão, alto acoplamento, etc.