Model-View-Controller
Por Arthur Silva Freire
(arthur.freire@ccc.ufcg.edu.br)
Neste mês, abordaremos um assunto bastante conhecido na Ciência da Computação, o padrão de projeto MVC (Model-View-Controller), além de apresentar uma visão geral do que é um padrão de projeto e quais são os benefícios adquiridos em usá-lo.

Antes de conceituar um padrão de software, vamos ver porque é interessante utilizá-lo. Alguns problemas se repetem no desenvolvimento de software e, para contornar essa situação, os desenvolvedores devem aplicar boas soluções. Se esses problemas se repetem, porque não reutilizar essas boas soluções em outros projetos? É a partir dessa filosofia que surgem os padrões de projeto.

Um padrão de software é a descrição de um problema que ocorre com frequência e, também, a própria base para a sua solução. Os padrões podem ser reutilizados em inúmeros projetos e a aplicação desses fornece uma solução elegante e adaptável. Vale ressaltar, que a utilização desses padrões nos permite reutilizar ideias e não código. Os padrões de projeto foram criados a partir de um somatório de experiências dos maiores projetistas em orientação a objetos. Essa turma era formada por quatro integrantes (Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides), e ficou conhecida como a “Gangue dos Quatro”.

A Gangue dos Quatro e o livro Design Patterns.

Agora, vamos falar do MVC. Muitas vezes, as interfaces com os usuários são sensíveis a mudanças, ou, em outros casos, a aplicação tem que ser implementada em outra interface. Além disso, existe a possibilidade de o cliente querer que a aplicação funcione com linha de comando, ao invés de com uma interface gráfica. Logo, se o código da interface for muito acoplado ao código da aplicação, o desenvolvimento e a manutenção serão muito custosos. Uma ótima solução para esses problemas é a utilização do padrão MVC.

O MVC sugere que, durante o desenvolvimento, a lógica de negócios (Model) seja separada da interface de usuário (View) e do fluxo da aplicação (Control). Isso visa permitir que uma mesma lógica de negócios possa ser acessada e visualizada por diversas interfaces. Assim, o modelo (Model) não sabe quantas nem quais interfaces com o usuário estão exibindo o seu estado.

A seguir, um passo-a-passo de como implementar o MVC:

  • Passo 1
    • Isolar a lógica de negócio do sistema;
    • As classes de negócio não devem “conhecer” nada relacionado à(s) interface(s) de exibição do seu estado.
  • Passo 2
    • Implementar os controladores;
    • Utilizar uma arquitetura baseada em eventos. Dessa maneira, as telas interessadas em exibir os eventos do modelo, cadastram-se nos controladores;
    • Além disso, as controladoras são responsáveis por repassar as requisições das visões para o modelo.
  • Passo 3
    • Implementar as visões que, por meio do controlador, acessarão o estado do modelo.
Arquitetura do MVC.

As responsabilidades ficam divididas com a aplicação do padrão MVC. Cada integrante tem sua responsabilidade na aplicação. A seguir, serão mostradas as responsabilidades atribuídas a cada integrante de uma aplicação MVC.

  • Modelo (Model)
    • Funcionalidade principal da aplicação;
    • Registrar controllers e views;
    • Notificar controllers e views registrados de alterações.
  • Visão (View)
    • Criar e inicializar o controlador associado;
    • Exibir informação ao usuário;
    • Implementar o procedimento de atualização;
    • Recuperar dados do modelo.
  • Controlador (Controller)
    • Receber a entrada de dados/requisições do usuário;
    • Transformar as requisições dos usuários em requisições ao modelo;
    • Implementar o procedimento de atualização (se necessário).

Com certeza, existem algumas consequências ao se implantar o MVC em um sistema. Elas podem ser vistas como vantagens e desvantagens. A seguir, uma listagem dessas consequências.

  • Vantagens
    • Suporte a múltiplas interfaces de usuário utilizando o mesmo modelo de negócio;
    • Novas interfaces podem ser adicionadas sem alteração do modelo;
    • Alterações no estado do modelo são refletidas em todas as visões.
  • Desvantagens
    • Com muitas visões e o modelo atualizado com muita frequência, o desempenho do sistema pode ser afetado;
    • Se o padrão não for bem implementado, pode-se ter casos como o envio de atualizações para visões que estão minimizadas ou fora do campo de visão do usuário;
    • Ineficiência: uma visão pode ter que fazer inúmeras chamadas ao modelo, dependendo de sua interface.

Você deve estar se perguntando quando usar o MVC. Bem, isso é simples: quando houver a necessidade de várias interfaces com o usuário (Web, Swing), ou houver a necessidade de várias visões dos dados (Planilhas, Tabelas, Gráficos, etc.), ou seja, quando a mudança nos dados tiver a necessidade de ser refletida na interface.

Existem vários frameworks, em Java, que utilizam o padrão MVC, como, por exemplo, Apache Struts, Apache Cocoon, Spring MVC, WebWork, Java Server Faces e Grails. Esse padrão é ensinado aos alunos de Ciência da Computação, da UFCG, na disciplina de Sistemas de Informação I.

Fontes:

  • [1] Material de aula da disciplina de Sistemas de Informação I do professor Hyggo Almeida;
  • [2] Material de aula da disciplina de Sistemas de Informação I do professor Jacqués Sauvé;
Jornal PETNews - Edição: Jeymisson Oliveira - Revisão: Savyo Nóbrega e Joseana Fechine
Grupo PET Computação UFCG, 2012. All rights reserved.