Um guia para iniciantes na arquitetura MVC em Java

Publicados: 2018-04-10

Se você está relacionado à cena de desenvolvimento web, certamente já se deparou com a sigla “MVC” centenas de vezes, se não mais. MVC é um dos padrões de design mais falados no mundo da programação web hoje, e com razão. Neste artigo, vamos levá-lo através do mundo da arquitetura MVC. Falaremos sobre o básico do MVC, suas vantagens e, por fim, um código simples que ajudará você a entender a implementação do MVC em Java de forma mais clara.

Índice

O que exatamente é a arquitetura MVC?

Antes de entrarmos nos detalhes técnicos, vamos deixar algumas coisas claras – MVC NÃO é um padrão de design, é uma maneira de estruturar seus aplicativos. Nos últimos anos, as aplicações web estão usando extensivamente a arquitetura MVC e, portanto, é natural confundi-la com um padrão de design exclusivo para aplicações web. No entanto, vamos dizer que o MVC foi descrito pela primeira vez em 1979 – antes da era WWW, quando não havia o conceito de aplicativos da web. A arquitetura utilizada hoje para aplicações web é uma adaptação do padrão original.
Na verdade, essa arquitetura foi inicialmente incluída nos dois principais frameworks de desenvolvimento web – Struts e Ruby on Rails. Esses dois ambientes abriram caminho para a maioria dos frameworks da Web que vieram depois – e assim a popularidade dessa arquitetura continuou aumentando.

Aprenda a criar aplicativos como Swiggy, Quora, IMDB e muito mais

O padrão arquitetural MVC segue uma ideia elementar – devemos separar as responsabilidades em qualquer aplicação da seguinte forma:

  • Modelo: lida com dados e lógica de negócios.
  • View: Apresenta os dados ao usuário sempre que solicitado.
  • Controlador: Atende as solicitações do usuário e busca os recursos necessários.

Cada um dos componentes tem um conjunto de tarefas demarcado que garante o bom funcionamento de toda a aplicação juntamente com a modularidade completa. Vamos dar uma olhada em cada um desses componentes em mais detalhes.

Controlador

O controlador é como a governanta do aplicativo – ele executa a coordenação entre o modelo e a visualização para atender a uma solicitação do usuário. As solicitações do usuário são recebidas como HTTP get ou post request – por exemplo, quando o usuário clica em qualquer elemento da GUI para realizar qualquer ação.
A função primária de um controlador é chamar e coordenar com o modelo para buscar quaisquer recursos necessários para agir. Normalmente, ao receber uma solicitação do usuário, o controlador chama o modelo apropriado para a tarefa em questão.

Modelo

O modelo é simplesmente os dados para nossa aplicação. Os dados são “modelados” de forma fácil de armazenar, recuperar e editar. O modelo é como aplicamos regras aos nossos dados, o que eventualmente representa os conceitos que nosso aplicativo gerencia.
Para qualquer aplicativo de software, tudo é modelado como dados que podem ser manipulados facilmente. O que é um usuário, um livro ou uma mensagem para um aplicativo? Nada realmente, apenas dados que devem ser processados ​​de acordo com regras específicas. Tipo, a data não deve ser maior que a data atual, o e-mail deve estar no formato correto, o nome não deve ter mais de “x” caracteres, etc.

Sempre que um usuário faz qualquer solicitação do controlador, ele entra em contato com o modelo apropriado que retorna uma representação de dados do que o usuário solicitou. Este modelo será o mesmo para um determinado trabalho, independentemente de como desejamos exibi-lo ao usuário. É por isso que podemos escolher qualquer visualização disponível para renderizar os dados do modelo.
Além disso, um modelo também contém a lógica para atualizar o controlador relevante sempre que houver alguma alteração nos dados do modelo.

Visualizar

Como o nome sugere, a view é responsável por renderizar os dados recebidos do modelo. Pode haver modelos pré-projetados nos quais você pode ajustar os dados e pode até haver várias visualizações diferentes por modelo, dependendo dos requisitos.

Qualquer aplicação web é estruturada tendo em mente esses três componentes principais. Pode haver um controlador primário responsável por receber todas as solicitações e chamar o controlador específico para ações específicas. Vamos entender melhor o funcionamento de uma aplicação web sob a arquitetura MVC usando um exemplo.

Vamos ver um exemplo

Vamos dar um exemplo de uma papelaria online. O usuário pode visualizar itens, comprar, adicionar itens ao carrinho, adicionar itens ao pedido atual ou até mesmo adicionar/remover itens (se ele for o administrador).
Agora, vamos ver o que acontecerá quando um usuário clicar no título “Canetas” para ver a lista de canetas.
Nossa aplicação terá um controlador específico para tratar de todas as consultas relacionadas a canetas. Digamos que se chama “pens_controller.php”. Teremos também um modelo que armazenará os dados das canetas que temos – vamos chamá-lo de “pens_model.php”. Por fim, teremos várias visualizações para apresentar os dados – uma lista de penas, uma tabela exibindo as penas, uma página para editar a lista, etc.
A figura a seguir mostra o fluxo completo de controle desde o momento em que um usuário clica em “canetas”, até quando o resultado é renderizado na frente dele:

Primeiro, o “pens_controller.php” trata a requisição do usuário (1) como uma requisição GET ou POST. Também podemos ter um “index.php” que é o controlador central que chamará o “pens_controller” sempre que necessário.
O controlador então examina a solicitação e os parâmetros e chama o modelo requerido – neste caso, “pens_model.php”. O controlador solicita ao modelo que retorne a lista de canetas disponíveis (2).
Agora, o modelo procura no banco de dados as informações necessárias (3), aplica lógicas se necessário e retorna os dados para o controlador(4).
O controlador então escolhe uma visualização apropriada (5) e apresenta os dados (6 e 7). Se uma solicitação vier de um dispositivo portátil, uma visualização adequada para ela será usada, ou se o usuário tiver um determinado tema selecionado, sua visualização será escolhida – e assim por diante.
Como se tornar um desenvolvedor fullstack

As vantagens da arquitetura MVC

Um problema comum enfrentado pelos desenvolvedores de aplicativos atualmente é o suporte para diferentes tipos de dispositivos. A arquitetura MVC resolve esse problema, pois os desenvolvedores podem criar interfaces diferentes para dispositivos diferentes e, com base em qual dispositivo a solicitação é feita, o controlador selecionará uma visualização apropriada. O modelo envia os mesmos dados independentemente do dispositivo utilizado, o que garante uma consistência completa em todos os dispositivos.
A separação MVC isola lindamente a visão da lógica de negócios. Também reduz as complexidades no projeto de grandes aplicativos, mantendo o código e o fluxo de trabalho estruturados. Isso torna o código geral muito mais fácil de manter, testar, depurar e reutilizar.

Uma implementação simples do MVC usando Java

Teremos os três seguintes:

    1. StudentObject : o modelo.

    1. StudentView: visualize a turma para imprimir detalhes no console.

  1. StudentController: um controlador que armazena dados em studentObject e atualiza StudentView de acordo

Etapa 1: criar o modelo

 classe pública Aluno {
   private String rollNo ;
   nome da string privada ;
   
   public String getRollNo () {
      return rollNo ;
   }
   
   public void setRollNo ( String rollNo ) {
      isso . rollNo = rollNo ;
   }
   
   public String getNome () {
      nome de retorno ;
   }
   
   public void setName ( nome da string ) {
      isso . nome = nome ;
   }
}

O código é autoexplicativo. Consiste em funções para obter/definir o número do rolo e os nomes dos alunos. Vamos chamá-lo de “student.java”.
Etapa 2: criar a visualização

 classe pública StudentView {
   public void printStudentDetails ( String studentName , String studentRollNo ){
      Sistema . fora . println ( "Aluno: " );
      Sistema . fora . println ( "Nome:" + nomedoaluno );
      Sistema . fora . println ( "Roll No: " + studentRollNo );
   }
}

Isso é simplesmente para imprimir os valores no console. Vamos chamar isso de “studentView.java”.
Etapa 3: criar o controlador

 classe pública StudentController {
   modelo Aluno privado ;
   vista StudentView privada ;
   public StudentController ( modelo de aluno , visualização StudentView ){
      isso . modelo = modelo ;
      isso . ver = ver ;
   }
   public void setStudentName ( nome da string ){
modelo . setNome ( nome );
   }
   public String getStudentName (){
      modelo de retorno . getNome ();
   }
   public void setStudentRollNo ( String rollNo ){
modelo . setRollNo ( rollNo );
   }
   public String getStudentRollNo (){
      modelo de retorno . getRollNo ();
   }
   public void updateView (){
ver . printStudentDetails ( model . getName (), model . getRollNo ());
   }
}

Chame isso de “StudentController.java”. Uma olhada rápida lhe dirá que este controlador é apenas responsável por chamar o modelo para obter/definir os dados e, em seguida, atualizar a visualização.
Agora, vamos dar uma olhada em como tudo isso está ligado.
Etapa 4: criar o arquivo Java principal

 public class MVCPatternDemo {
   public static void main ( String [] args ) {
      //busca o registro do aluno com base em seu número de rolo do banco de dados
      Modelo do aluno = recuperarStudentFromDatabase ();
      //Cria uma visão: para escrever os detalhes do aluno no console
      visão StudentView = new StudentView ();
      controlador StudentController = new StudentController ( model , view );
controlador . atualizaçãoVisual ();
      //atualiza os dados do modelo
controlador . setNomeAluno ( "João" );
controlador . atualizaçãoVisual ();
   }
   private static Student retiveStudentFromDatabase (){
      Aluno aluno = novo Aluno ();
estudante . setNome ( "Roberto" );
estudante . setRollNo ( "10" );
      aluno de retorno ;
   }
}

Isso é chamado de “MVCPatternDemo.java”. Como você pode ver, ele busca os dados do aluno do banco de dados ou de uma função (neste caso, estamos usando uma função para definir os valores) e os envia para o modelo Student. Em seguida, ele inicializa a visão que criamos anteriormente.
Além disso, ele também inicializa nosso controlador e o vincula ao modelo e à exibição. O método updateView() é uma parte do controlador que atualiza os detalhes do aluno no console.
Etapa 5: teste o resultado
Se tudo der certo, o resultado deve ser:

 Aluna:
Nome: Roberto
Nº do rolo: 10
Aluna:
Nome: João
Nº do rolo: 10

Se você receber isso como saída, parabéns! Você implementou com sucesso a arquitetura MVC usando Java, embora para um aplicativo simples. Por mais simples que seja, esta aplicação é suficiente para demonstrar os poderes da arquitetura MVC.
15 perguntas obrigatórias da entrevista Spring MVC

Empacotando…
Depois de tanto dito e feito, é difícil enfatizar mais o poder da arquitetura MVC em qualquer aplicação web/desktop nos dias de hoje. Ele fornece um nível totalmente novo de modularidade ao seu código, o que o torna muito mais legível e de fácil manutenção. Portanto, se você deseja escalar para novos patamares em sua carreira como desenvolvedor de aplicativos, obter a arquitetura MVC e seu funcionamento deve ser sua principal prioridade.

Inscreva-se em cursos de engenharia de software das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Deixe um comentário e deixe-nos saber como você gosta deste artigo!

Torne-se um Desenvolvedor Full Stack

Diploma PG UpGrad e IIIT-Bangalore em Desenvolvimento de Software
Inscreva-se agora para Mestrado em Engenharia de Software