Model-View-Controller (MVC)

Computação II - Ciência da Computação


Prof.: Danilo S. Carvalho

Nessa aula, aprenderemos um pouco sobre o padrão de projeto Model-View-Controller, conhecido popularmente como MVC.


Ao final da aula, entenderemos a importância da separação do código dos nossos programas em partes relativas ao seu papel no funcionamento de um sistema.

Qualquer sistema de complexidade não trivial pode (e deve) ser separado em partes que incluam módulos relacionados, visando facilitar sua compreensão e a aplicação de padrões de projeto.


Os pacotes em Java e seus correspondentes em outras linguagens de programação possibilitam essa separação, mas não determinam como ela deve ser feita e organizada.


Precisamos então de um padrão para nos guiar na separação dos módulos do programa, de acordo com critérios bem definidos e que seja aplicável a uma ampla variedade de sistemas.

Para atenter a essa necessidade, existe o padrão de projeto Model-View-Controller (MVC).


Esse padrão define uma forma de organizar os módulos de acordo com o papel destes no funcionamento do sistema.


Tais papéis são simples de compreender e estão presentes na vasta maioria dos sistemas de informação.

O padrão MVC define três componentes, que dão nome ao padrão:


Model

Representa o papel do modelo conceitual do sistema.

Os módulos nesse componente cuidam da estrutura de dados do programa e de regras específicas de manipulação dos dados.

Também pode cuidar de elementos relativos à persistência dos dados.

Um módulo do modelo conceitual é tipicamente uma representação mental de um elemento de interesse do sistema (ex: livro, pessoa).

Idealmente, esses conceitos também estão alinhados com a representação mental do usuário do sistema.

View

Representa a interface do sistema com o usuário.

Os módulos desse componente cuidam da interação com o usuário, sendo responsáveis por apresentar telas, mensagens e resultados, e também de coletar entradas e ações do usuário.

Pode ser notificado sobre mudanças nos dados relevantes pelo componente Model, atualizando a apresentação dos dados ao usuário de acordo.

Controller

Representa a lógica de funcionamento do sistema.

Os módulos desse componente cuidam de todas as funções relativas ao processamento dos dados e interagem com os componentes Model e View.

Do Model os dados são consultados e atualizados conforme a necessidade. O Model notifica os módulos interessados no Controller quando um dado relevante sofre alguma alteração.

Da View os módulos do Controller recebem requisições para executar operações sobre os dados. Os módulos do Controller podem comandar a interface, mudando telas ou atualizando dados, por exemplo.

Os três componentes trabalham em conjunto durante toda a vida do programa.

A separação dos componentes permite a especialização de soluções e de pessoal para a construção de sistemas complexos.

O MVC é um padrão de projeto bastante utilizado, e é recomendado para qualquer sistema de informação que não seja trivial, ou seja, praticamente qualquer sistema "de verdade".

A sua aplicação proporciona ao programador um entendimento melhor dos dados, operações, e interfaces de um sistema.

Esse entendimento é cumulativo e acompanha o programador em sua evolução.

O MVC é um padrão de projeto essencial na construção de sistemas complexos.


A separação de módulos do programa em componentes de acordo com o seu papel no funcionamento do sistema deve fazer parte da disciplina dos desenvolvedores.


O modelo conceitual, interface com o úsuário, e lógica de funcionamento são componentes simples de identificar e devem ser uma consideração inicial do projeto de software.

Perguntas:

  1. A que componentes do padrão MVC correspondem a classe FormularioDeInscricao, ContaBancaria e OperacoesDeCredito, respectivamente?
  2. Qual padrão de projeto pode ser usado para implementar a atualização de informações da View, quando o modelo de dados é alterado?

Perguntas:

  1. Se vocês implementaram o exercício dado na última lista segundo os requisitos, falta pouco para o programa de vocês estar aderente ao padrão MVC. Identifique as lacunas e aplique o padrão MVC no sistema criado por vocês.

Até a próxima aula!