MVC
O padrão de projeto MVC (acrônimo para Model-View-Control) é um dos mais tradicionais e conhecidos. Ganhou popularidade a partir dos anos 1980 quando aplicações com interfaces gráficas com o usuário se tornaram comum.
De modo geral pode-se dizer que qualquer aplicação que possua uma interface com o usuário deve implementar o padrão MVC. No conexto das aplicações para web o padrão aparece em dois contextos.
Contexto Web 1.0
Em aplicações onde as páginas são 100% geradas no lado servidor o padrão MVC aparece na camada 2, responsável por receber as requisições HTTP e devolver respostas HTTP contendo a página gerada. Nesse contexto, o MVC se materializa da seguinte forma:
Model : o modelo dados corresponde aos dados (normalmente objetos) definidos pela camada 3 (camada lógica ou de negócios) na linguagem de programação usada no lado servidor.
View : algoritmos que produzem como resposta textos escritos em HTML, frequentemente baseados em templates.
Control : algoritmo que que recebe a requisição HTTP, extrai os dados pertinentes, aciona o modelo de dados pertinente para que a requisição seja atendida e, com base no resultado emitido pelo modelo, decide qual página HTML deve ser produzida.
Contexto Web 2.0
Já no contexto onde a interface com o usuário é gerada no lado do cliente o padrão MVC fica restrito a esta camada, da seguinte forma:
Model : o modelo corresponde a objetos JavaScript.
View : depende da biblioteca/framework utilizado.
Control : depende da biblioteca/framework utilizado.
A view tipicamente é "programada" por meio de templates HTML e CSS. "Programar" a view é escrever textos em HTML e em CSS. A biblioteca React, por outro lado, foi pioneira ao definir que a programação da view se faz por meio de código JavaScript, em particular a abordagem baseada em componentes.
O controle é feito via algoritmos JavaScritp criados pelo desenvolvedor da aplicação ou já existentes na biblioteca/framework. A sincronização entre o modelo e a view deve ser feita nos dois sentidos (sincronização bidirecional) pois ações do usuário podem provocar alterações no modelo de dados como alterações no modelo (chegada de uma resposta HTTP ou mensagem Websocket, por exemplo) devem produzir atualizações na página HTML que o navegador está exibindo. O framework AngularJS fez muito sucesso extamente porque a parte do controle era 100% automatizada.
Declínio
O reinado do MVC parece estar ameaçado com uma abordagem radicalmente diferente, o fluxo unidirecional de dados (visto em outra seção).