Model-View-Controller é um padrão de arquitetura de software usado para implementa uma Interface de Usuário Final.
O objetivo do MVC é separar a lógica em três elementos:
O MVC é usado em várias áreas, em vários tipos de projetos, aqui veremos exemplos de MVC para um projeto em Java.
Neste curso faremos projetos usando o padrão MVC. Todos os projetos seguirão o seguinte padrão:
interface
View
, com
Controller
poderá fazer para o View
addActionListener
para cada interação que o usuário, indiretamente, poderá fazer com o Model
interface
Model
, com todas as requisições que o Controller
poderá fazer para o Model
.Controller
que
View
e de Model
em seu constructor
eActionListener
para cada interação que o usuário poderá fazer com o Model
View
com o Model
Os exemplos vistos nas aulas seguirão o seguinte fluxo
Vamos considerar um projeto que guarda nomes de pessoas em um banco de dados, e uma interface de usuário que permite ao usuário fazer uma busca de uma parte do nome, e inserir um nome
Teremos uma interface View
interface View { // configurações de gatilhos de ações public void addAcaoInserirNome(ActionListener acaoInserirNome); public void addAcaoBuscarNome(ActionListener acaoBuscarNome); // mostrar dados do programa public void mostrarNomes(List<String> nomes); // requisições de entrada de usuários public String getNomeBusca(); public String getNomeInserir(); }
Teremos uma interface Model
interface Model { // ações para fazer em um banco de dados public List<String> buscarNome(String nome); public void inserirNome(String nome); }
Teremos uma classe concreta Controller
programado para as interface View
e Model
class Controller { Model model; View view; public Controller(Model aModel, View aView){ this.model = aModel; this.view = aView; } public void init(){ view.addAcaoInserirNome(new AcaoInserirNome()); view.addAcaoBuscarNome(new AcaoBuscarNome()); } class AcaoBuscarNome implements ActionListener{ @Override public void actionPerformed(ActionEvent e){ // resuisita as entradas para o view String nome = view.getNomeBusca(); // pede para o model fazer a busca List<String> nomes = model.buscarNome(nome); // pede para o view mostrar o resultado view.mostrarNomes(nomes); } } class AcaoInserirNome implements ActionListener{ @Override public void actionPerformed(ActionEvent e){ // resuisita as entradas para o view String nome = view.getNomeInserir(); // pede para o model fazer a inserção model.inserirNome(nome); } } }
Vamos considerar um projeto recebe dois números do usuário e faz algum tipo de conta.
interface View { // configurações de gatilhos de ações public void addAcaoCalcular(ActionListener acaoCalcular); // mostrar dados do programa public void mostrarResultado(int resultado); // requisições de entrada de usuários public int getNumeroA(); public int getNumeroB(); }
interface Model { // ações para fazer em um banco de dados ou resolvedores matemáticos public int calcularNumeros(int a, int b); }
class Controller { Model model; View view; public Controller(Model aModel, View aView){ this.model = aModel; this.view = aView; } public void init(){ view.addAcaoCalcular(new AcaoCalcular()); } class AcaoCalcular implements ActionListener{ @Override public void actionPerformed(ActionEvent e){ // resuisita as entradas para o view int numeroA = view.getNumeroA(); int numeroB = view.getNumeroB(); // pede para o model fazer as contas int result = model.calcularNumeros(numeroA, numeroB); // mostra o resultado para o view view.mostrarResultado(result); } } }
O modelo MVC permite que o programa seja flexível e que funcione com qualquer implementação das interfaces View
e Model
. Nos laboratórios vamos ver exemplos de implementações destas interfaces, e como testar as implementações.
.