MVC
MVC é o acrônimo de Model-View-Controller (em português: Arquitetura Modelo-Visão-Controle - MVC) é um padrão de projeto de software,[1] ou padrão de arquitetura de software formulado na década de 1970,[2] focado no reuso de código e a separação de conceitos em três camadas interconectadas, onde a apresentação dos dados e interação dos usuários (front-end) são separados dos métodos que interagem com o banco de dados (back-end).[2]
Normalmente usado para o desenvolvimento de interfaces de usuário que divide uma aplicação em partes (camadas/componentes) interconectadas. Isto é feito para separar representações de informação internas dos modos como a informação é apresentada para e aceita pelo usuário,[3][4] levando ao desenvolvimento paralelo de maneira eficiente.
História do MVC
[editar | editar código-fonte]A arquitetura MVC (Model-View-Controller) foi criada nos anos 80 na Xerox Parc, por Trygve Reenskaug, que iniciou em 1979 o que viria a ser o nascimento do padrão de projeto MVC. A implementação original foi descrita no artigo “Applications Programming in Smalltalk-80: How to use Model-View-Controller”. [5]
Os componentes do MVC
[editar | editar código-fonte]Tradicionalmente usado para interfaces gráficas de usuário (GUIs), esta arquitetura tornou-se popular para projetar aplicações web e até mesmo para aplicações móveis, para desktop e para outros clientes.[6] Linguagens de programação populares como Java, C#, Object Pascal/Delphi, Ruby, PHP, JavaScript e outras possuem frameworks MVC populares que são atualmente usados no desenvolvimentos de aplicações web.
Camada de modelo ou da lógica da aplicação (Model)
[editar | editar código-fonte]Modelo é a ponte entre as camadas Visão (View) e Controle (Controller),[2] consiste na parte lógica da aplicação, que gerencia o comportamento dos dados através de regras de negócios, lógica e funções.[7] Esta fica apenas esperando a chamada das funções,[7] que permite o acesso para os dados serem coletados, gravados e, exibidos.[2]
É o coração da execução, responsável por tudo que a aplicação vai fazer a partir dos comandos da camada de controle em um ou mais elementos de dados, respondendo a perguntas sobre o sua condição e a instruções para mudá-las. O modelo sabe o que o aplicativo quer fazer e é a principal estrutura computacional da arquitetura, pois é ele quem modela o problema que está se tentando resolver. Modela os dados e o comportamento por trás do processo de negócios. Se preocupa apenas com o armazenamento, manipulação e geração de dados. É um encapsulamento de dados e de comportamento independente da apresentação.
Camada de apresentação ou visualização (View)
[editar | editar código-fonte]Visão pode ser qualquer saída de representação dos dados, como uma tabela ou um diagrama. É onde os dados solicitados do Modelo (Model) são exibidos.[2] É possível ter várias visões do mesmo dado, como um gráfico de barras para gerenciamento e uma visão tabular para contadores. A Visão também provoca interações com o usuário, que interage com o Controle (Controller). O exemplo básico disso é um botão gerado por uma Visão, no qual um usuário clica e aciona uma ação no Controle.[2]
Não se dedica em saber como o conhecimento foi retirado ou de onde ela foi obtida, apenas mostra a referência. Segundo Gamma et al (2006), ”A abordagem MVC separa a View e Model por meio de um protocolo inserção/notificação (subscribe/notify). Uma View deve garantir que sua expressão reflita o estado do Model. Sempre que os dados do Model mudam, o Model altera as Views que dependem dele. Em resposta, cada View tem a oportunidade de modificar-se”. Adiciona os elementos de exibição ao usuário: HTML, ASP, XML, Applets. É a camada de interface com o usuário. É utilizada para receber a entrada de dados e apresentar visualmente o resultado.
Camada de controle ou controlador (Controller)
[editar | editar código-fonte]Controle é o componente final da tríade, faz a mediação da entrada e saída, comandando a visão e o modelo para serem alterados de forma apropriada conforme o usuário solicitou através do mouse e teclado.[7] O foco do Controle é a ação do usuário, onde são manipulados os dados que o usuário insere ou atualiza, chamando em seguida o Modelo.[2]
O Controle (Controller) envia essas ações para o Modelo (Model) e para a janela de visualização (View) onde serão realizadas as operações necessárias.
Interação dos componentes
[editar | editar código-fonte]Além de dividir a aplicação em três tipos de componentes, o desenho MVC define as interações entre eles.
- O Controlador (controller) envia comandos para o modelo para atualizar o seu estado (por exemplo, editando um documento). O controlador também pode enviar comandos para a visão associada para alterar a apresentação da visão do modelo (por exemplo, percorrendo um documento).
- Um modelo (model) armazena dados e notifica suas visões e controladores associados quando há uma mudança em seu estado. Estas notificações permitem que as visões produzam saídas atualizadas e que os controladores alterem o conjunto de comandos disponíveis. Uma implementação passiva do MVC monta estas notificações, devido a aplicação não necessitar delas ou a plataforma de software não suportá-las.
- A visão (view) gera uma representação (Visão) dos dados presentes no modelo solicitado, fazendo a exibição dos dados, sendo ela por meio de um html ou xml.
Uso em aplicações web
[editar | editar código-fonte]Mesmo tendo sido desenvolvida inicialmente para computação pessoal, o MVC foi drasticamente adaptado como uma arquitetura para as aplicações web em todas as maiores linguagens de programação. Muitos frameworks de aplicação comerciais e não comerciais foram desenvolvidos tendo como base esse modelo. Tais frameworks variam em suas interpretações, principalmente no modo que as responsabilidades MVC são separadas entre o cliente e servidor.
Os frameworks web MVC mais recentes levam uma abordagem de thin client que quase colocou o modelo, a visão e a lógica do controlador inteiros no servidor. Nesta abordagem, o cliente envia requisições de hiperlink ou entrada de formulário ao controlador e então recebe uma página web completa e atualizada (ou outro documento) da visão. O modelo existe inteiramente no servidor. Como as tecnologias de cliente amadureceram, frameworks como JavaScriptMVC e Backbone foram criados o que permite que os componentes MVC executem parcialmente no cliente (ver também AJAX).
Um caso prático é uma aplicação web em que a visão é um documento HTML (ou derivado) gerado pela aplicação. O controlador recebe uma entrada GET
ou POST
após um estímulo do utilizador e decide como processá-la, invocando objetos do domínio para tratar a lógica de negócio, e por fim invocando uma visão para apresentar a saída
Vantagens e desvantagens
[editar | editar código-fonte]Vantagens do modelo MVC:
- Como o modelo MVC gerencia múltiplos views usando o mesmo modelo é fácil manter, testar e atualizar sistemas compostos;
- É muito simples adicionar novos clientes apenas incluindo seus views e controles;
- Torna a aplicação escalável;
- É possível ter desenvolvimento em paralelo para o modelo, visualizador e controle pois são independentes;
- Facilita o reuso do código;
- Melhor nível de sustentabilidade, pois facilita a manutenção da aplicação;
- Fácil transformação da interface, sem que haja necessidade de modificar a camada de negócio;
- Melhor desempenho e produtividade, graças a estrutura de pacotes modulares;
- A arquitetura modular permite aos desenvolvedores e designers desenvolverem em paralelo;
- Partes da aplicação podem ser alteradas sem a necessidade de alterar outras.
Desvantagens do modelo MVC:
- Necessita de um tempo maior para explorar e modelar o sistema;
- Requer mão-de-obra especializada;
- À medida que o tamanho e a complexidade do projeto crescem, a quantidade de arquivos e pastas continuará aumentando também. Os interesses de UI (interface do usuário) (modelos, exibições, controladores) se localizam em várias pastas, que não são formadas em grupos por ordem alfabética.
Justificativa
[editar | editar código-fonte]A popularidade dessa arquitetura pode ser vista principalmente no desenvolvimento de aplicações WEB. Isso é uma consequência do ambiente ter um alcance ilimitado e com constante crescimento, onde a escalabilidade é um dos fatores mais importantes.
Com o aumento da complexidade das aplicações desenvolvidas, sempre visando a programação orientada a objeto, torna-se relevante a separação entre os dados e a apresentação das aplicações. Desta forma, alterações feitas no layout não afetam a manipulação de dados, e estes poderão ser reorganizados sem alterar o layout.
Esse padrão resolve tal problema através da separação das tarefas de acesso aos dados e lógica de negócio, lógica de apresentação e de interação com o utilizador, introduzindo um componente entre os dois: o controlador.
A separação de propósitos que o paradigma MVC propõem ajuda na escalabilidade e padronização de um produto. Manter um código que cresce constantemente em grandes corporações é uma tarefa árdua, e pequenas equipes também podem sofrer para aumentar a escalabilidade de um produto se não houver um preparo.
Essa divisão de preocupações, ajuda na separação de tarefas e torna-as mais específicas, uma consequência disso é que os códigos possuem um propósito melhor definido, o que facilita no teste e no contexto de seu desenvolvimento e na reutilização do mesmo.
Plataformas de desenvolvimento
[editar | editar código-fonte]Object Pascal / Delphi
[editar | editar código-fonte]Exemplo de MVC em PHP
[editar | editar código-fonte]Uma aplicação Web básica com arquitetura baseada no padrão MVC, com a configuração do relacionamento entre os componentes , implementado na linguagem de programação PHP:[2]
Camada Modelo:
<?php
class Model{
public $string;
public function __construct(){
$this->string = “MVC + PHP”;
}
}
?>
Camada Visão:
<?php
class View{
private $model;
private $controller;
public function __construct($controller,$model) {
$this->controller = $controller;
$this->model = $model;
}
public function output() {
return '<a href="mvc.php?action=clicked"' . $this->model->string . "</a>";
}
}
?>
Camada Controle:
<?php
class Controller{
private $model;
public function __construct($model){
$this->model = $model;
}
public function clicked() {
$this->model->string = “atualizado!”
}
}
?>
Relacionamento dos componentes:
<?php
$model = new Model();
$controller = new Controller($model);
$view = new View($controller, $model);
if (isset($_GET['action']) && !empty($_GET['action'])) {
$controller->{$_GET['action']}();
}
echo $view->output();
?>
Ver também
[editar | editar código-fonte]- Arquitetura multicamada
- Modelo em três camadas
- Cliente-servidor
- Cluster
- Lista de protocolos de redes
- Protocolo RPC
- Redes de computadores
- Sistema de processamento distribuído
- Sockets
- RESTful
- ↑ https://www.youtube.com/watch?v=o_TH-Y78tt4&t=1667
- ↑ a b c d e f g h Hopkins, Callum (4 de março de 2013). «The MVC Pattern and PHP» [O padrão MVC e o PHP]. SitePoint Pty. Consultado em 15 de outubro de 2019
- ↑ "More deeply, the framework exists to separate the representation of information from user interaction." The DCI Architecture: A New Vision of Object-Oriented Programming Arquivado em 29 de setembro de 2017, no Wayback Machine. – Trygve Reenskaug and James Coplien – 20 de março de 2009.
- ↑ Burbeck (1992): "... the user input, the modeling of the external world, and the visual feedback to the user are explicitly separated and handled by three types of object."
- ↑ Trygve M. H. Reenskaug/MVC—XEROX PARC 1978-79
- ↑ Davis, Ian. «What Are The Benefits of MVC?». Internet Alchemy. Consultado em 29 de novembro de 2016
- ↑ a b c «O que é Symfony?». TreinaWeb. 12 de junho de 2019. Consultado em 26 de dezembro de 2019
- ↑ Git/Fontes MVCBr
- ↑ Blog TireiDeLetra
- ↑ [1]
- ↑ [2]