O padrão MVC (Model-View-Controller, criado por Trygve Reenskaug em 1979) é um padrão de arquitetura de software que separa a lógica de negócios, a apresentação e a interação do usuário em três componentes distintos, também chamados de camadas: o modelo (Model), a visualização (View) e o controle (Controller).
O modelo (Model): representa a lógica de negócios e os dados do aplicativo. Ele é responsável por gerenciar o estado e as regras de negócio, realizar operações de leitura/gravação dos dados e notificar as alterações para as outras partes do sistema.
A visualização (View): é responsável pela apresentação dos dados ao usuário. Ela exibe as informações do modelo de forma adequada e interage com o usuário, permitindo a entrada de dados e a realização de ações. A visualização também pode enviar solicitações ao controlador para processamento adicional.
O controle (Controller): atua como intermediário entre a visualização e o modelo. Ele recebe as interações do usuário na visualização e toma ações apropriadas, como atualizar o modelo, buscar informações adicionais ou redirecionar para outras visualizações. O controlador também é responsável por receber notificações do modelo sobre alterações de dados e atualizar a visualização de acordo.
A separação clara dessas responsabilidades permite a modularidade, reutilização de código e manutenção mais fácil do aplicativo. O padrão MVC promove o desacoplamento entre as diferentes partes do sistema, permitindo que elas evoluam independentemente umas das outras.
Por exemplo, para implementar o padrão MVC com a classe conceitual Estudante.java, você precisaria criar as classes View e Controller correspondentes.
Estudante.java (Model): Classe que representa o modelo de dados de um estudante. Ela pode conter atributos como nome, idade, matrícula, etc., juntamente com métodos para acessar e modificar esses dados.
EstudanteView.java (View): Classe responsável pela apresentação dos dados do estudante ao usuário. Ela pode exibir as informações do estudante em formato legível, como em uma interface gráfica ou no console. A EstudanteView também pode fornecer métodos para interagir com o usuário, como receber entradas de dados para atualizar o modelo.
EstudanteController.java (Controller): Classe que atua como intermediária entre a View e o Model. O EstudanteController recebe as interações do usuário da EstudanteView e toma ações apropriadas. Isso pode incluir a atualização do modelo Estudante.java com base nas entradas do usuário, buscar informações adicionais, coordenar a interação entre o Model e a View, etc. O EstudanteController também pode atualizar a EstudanteView com os dados mais recentes do modelo.
Estas três classes trabalham juntas para implementar o padrão MVC. A Estudante.java representa o modelo de dados, a EstudanteView.java lida com a apresentação dos dados ao usuário e a EstudanteController.java gerencia a interação entre o modelo e a visualização.
Geralmente, projetos orientados a objetos possuem muitas classes conceituais e, por isso, é comum haver pacotes para organizar cada uma das camadas do modelo MVC.
Arquivo Estudante.java
public class Estudante {
private String nome, RGA;
public Estudante(String nome, String RGA) {
this.setNome(nome);
this.setRGA(RGA);
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getRGA() {
return RGA;
}
public void setRGA(String RGA) {
this.RGA = RGA;
}
}
O padrão DAO (Data Access Object) é um padrão de projeto que separa a lógica de acesso aos dados do restante do código de uma aplicação. Este padrão fornece uma camada de abstração entre o modelo de dados e a camada de negócios, permitindo que as operações de leitura/gravação sejam realizadas de forma independente do sistema de armazenamento de dados subjacente.
A ideia principal do padrão DAO é encapsular as operações de acesso a dados em uma interface ou classe abstrata, fornecendo métodos para recuperar/mostrar, inserir, atualizar e excluir dados do sistema de armazenamento, o famoso CRUD (create, read, update, delete). Essa interface de acesso a dados define um contrato para as operações que podem ser realizadas no modelo de dados, ocultando os detalhes de implementação específicos do banco de dados.
Assim como no padrão MVC, a separação clara dessas responsabilidades permite a modularidade, reutilização de código e manutenção mais fácil do aplicativo.
A estrutura básica do padrão DAO inclui as seguintes entidades:
Interface DAO: Define os métodos que representam as operações de acesso a dados. Exemplo: EstudanteDAO.java
Classe de implementação DAO: Implementa a interface DAO e contém a lógica para acessar os dados reais do sistema de armazenamento. Exemplo: EstudanteDAOImpl.java
Classe de modelo de dados: Representa os dados a serem armazenados e acessados pelo DAO. Exemplo: Estudante.java
Arquivo EstudanteDAO.java
import java.util.ArrayList;
public interface EstudanteDAO {
void inserir(Estudante estudante);
Estudante buscarPorRGA(String RGA);
ArrayList<Estudante> buscarTodos();
void excluir(String RGA);
void atualizar(Estudante estudante, String nome);
}
Arquivo EstudanteDAOImpl.java
import java.util.ArrayList;
public class EstudanteDAOImpl implements EstudanteDAO {
// Implementação dos métodos de acesso a dados
// usando consultas SQL ou ORM
@Override
public void inserir(Estudante estudante) {
// Lógica para inserir um estudante no banco de dados
}
@Override
public Estudante buscarPorRGA(String RGA) {
// Lógica para buscar um estudante no banco de dados por RGA
return null;
}
@Override
public ArrayList<Estudante> buscarTodos() {
// Lógica para buscar todos os estudantes do banco de dados
return null;
}
@Override
public void excluir(String RGA) {
// Lógica para excluir um estudante do banco de dados por RGA
}
@Override
public void atualizar(Estudante estudante, , String nome) {
// Lógica para atualizar um estudante no banco de dados
}
}
Acesse o exemplo de projeto que contém arquitetura DAO para a classe conceitual Estudante que utiliza banco de dados MySQL.
Apesar dos padrões MVC e DAO serem independentes, eles podem coexistir em um mesmo projeto de arquitetura orientada a objetos, na qual os componentes do DAO fazem parte da camada de Modelo do Padrão MVC.
Acesse o exemplo de projeto MVC + DAO para a classe conceitual Estudante que utiliza banco de dados MySQL.