sábado, 1 de dezembro de 2012

MVC - Model-View-Controller

Introdução
Neste artigo vamos ver os conceitos para a utilização do padrão de projeto
Model-View-Controller(MVC), sua vantagens e características.
Entender em que ocasião devemos usar um padrão de projeto e qual padrão de projeto usar, esse é o grande diferencial de padrões, temos várias soluções hoje em dia, é importante conhece-las para saber escolher o melhor para o seu projeto e ter uma reutilização do código e flexibilidade maior.


O Padrão MVC

  O MVC é utilizado em muitos projetos devido à arquitetura que possui, o que possibilita a divisão do projeto em camadas muito bem definidas. Cada uma delas, o Model, o Controller e a View, executa o que lhe é definido e nada mais do que isso.

  A utilização do padrão MVC trás como benefício isolar as regras de negócios da lógica de apresentação, a interface com o usuário. Isto possibilita a existência de várias interfaces com o usuário que podem ser modificadas sem que haja a necessidade da alteração das regras de negócios, proporcionando assim muito mais flexibilidade e oportunidades de reuso das classes.

Conceito
Model-view-controller (MVC) é um padrão de arquitetura de software. Com o aumento da complexidade das aplicações desenvolvidas  torna-se fundamental a separação entre os dados (Model) e o layout (View). Desta forma, alterações feitas no layout não afectam a manipulação de dados, e estes poderão ser reorganizados sem alterar o layout. 
O model-view-controller resolve este 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 interacção com o utilizador, introduzindo um componente entre os dois: o Controller. MVC é usado em padrões de projeto de software, mas MVC abrange mais da arquitetura de uma aplicação do que é típico para um padrão de projeto.

Características Gerais
Uma das características de um padrão de projeto é poder aplicá-lo em sistemas distintos. O padrão MVC pode ser utilizado em vários tipos de projetos como, por exemplo, desktop, web e mobile. 
Agora vamos por partes para ver o que cada camada desse padrão de projeto representa dentro da aplicação
  • Model:
Na arquitetura MVC o Model representa os dados da aplicação e as regras do negócio que governam o acesso e a modificação dos dados. O Model mantém o estado persistente do negócio e fornece ao controlador a capacidade de acessar as funcionalidades da aplicação encapsuladas pelo próprio Model.
  • View:
Um componente View renderiza o conteúdo de uma parte particular do Model e encaminha para o Controller as ações do usuário; acessa também os dados do Model via o Controller e define como esses dados devem ser apresentados na View.
  • Controller
Um Controller define o comportamento da aplicação , é ele que interpreta as ações do usuário e as mapeia para chamadas do Model. Em um cliente de aplicações Web essas ações do usuário poderiam ser cliques de botões ou seleções de menus. As ações realizadas pelo Model incluem ativar processos de negócio ou alterar o estado do Model. Com base na ação do usuário e no resultado do processamento do Model , o Controller seleciona uma View a ser exibida como parte da resposta a solicitação do usuário. Há normalmente um Controller para cada conjunto de funcionalidades relacionadas ao sistema.


Características Técnicas
A partir de agora estamos aptos a entender o que cada parte desse padrão representa dentro de um sistema, mas ainda não vimos o que cada um representa de uma forma mais técnica, então vamos ver como nossas servlets irão se encaixar nesse padrão, por exemplo.
- Model: O Model é a camada que possui a lógica da aplicação. Ele é o responsável pelas regras de negócios, persistência com o banco de dados e as classes de entidades. O Model recebe as requisições vindas do Controller e gera respostas a partir destas requisições.
  • Modela os dados e o comportamento por atrás do processo de negócios;
  • É um encapsulamento de dados e de comportamento independente da apresentação;
  • Se preocupa apenas com o armazenamento , manipulação e geração de dados.
- View:  A View é a camada de visualização e representa a parte do sistema que interage com o usuário. É pela interface que haverá a entrada dos dados inseridos pelo usuário e também a saída de informações que serão exibidas para ele.
  • Inclui os elementos de exibição no cliente : HTML, XML, JSP, Javascript, etc;
  • É a camada que recebe as entradas de dados e apresenta os dados referente ao que foi requisitado;
  • É a camada de visualização do usuário.
- Controller: Já sabemos que as requisições são enviadas pela view e a lógica de negócios é representada pelo model. Para que haja a comunicação entre essas duas camadas de maneira organizada, é necessário construir a camada controller. 
Sua função é ser uma camada intermediária entre a camada de apresentação (View) e a camada de negócios (Model).
  • Controla e mapeia as ações do sistema;
  • Inclui as Servlets, ManagedBeans, Controllers, etc.
Vantagens e Desvantagens
Como todo padrão de projetos existente o MVC também tem as suas vantagens e desvantagens, porém, muito mais vantagens que desvantagens, nessa parte listaremos tudo isso:
- Vantagens:
  • Separação muito clara entre as camadas de visualização e regras de negócios;
  • Manutenção do sistema se torna mais fácil;
  • Reaproveitamento de código, principalmente da camada de modelo, que pode ser reutilizada em outros projetos;
  • É possível ter desenvolvimento em paralelo para o modelo, visualizador e controle pois são independentes;
  • As alterações na camada de visualização não afetam as regras de negócios já implementadas na camada de modelo;
  • Permite o desenvolvimento, testes e manutenção de forma isolada entre as camadas;
  • O projeto passa a ter uma melhor organização em sua arquitetura;
  • Torna o entendimento do projeto mais fácil para novos programadores que não participaram de sua criação;
  • Torna a aplicação escalável.
- Desvantagens:
  • Em sistemas de baixa complexidade, o MVC pode criar uma complexidade desnecessária;
  • Exige muita disciplina dos desenvolvedores em relação à separação das camadas;
  • Requer um tempo maior para modelar o sistema.
Frameworks MVC
  • Spring MVC
  • Apache Struts
  • JSF
  • Tapestry
  • Mentawai
  • VRaptor
  • WebWork
  • Neo Framework
  • Click Framework
Conclusão
O artigo apresentou os conceitos do padrão de projeto Model-View-Controller(MVC), a necessidade por uma solução que desacoplasse as camadas  de um projeto fez aparecer o padrão MVC, um padrão que separa cada camada com coesão, assim definindo uma maior flexibilidade na hora de fazer alguma mudança no código, também com uma abstração maior programadores experientes tem uma facilidade maior na hora de apresentar o projeto para um programador inexperiente. O padrão MVC traz várias vantagens como podemos ver ao longo do artigo, e algumas desvantagens também, cabe agora a você definir se o MVC é padrão de projeto que mais se encaixa no seu sistema.