Você está na página 1de 29

1

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br

MVC (MODELO-VISO-CONTROLADOR)
Este tutorial tem como finalidade trazer os conceitos sobre MVC e mostra na prtica como funciona em aplicaes desktop.

Definio
Padro de arquitetura de software que tem como finalidade separar a estrutura de dados (modelo), da apresentao para o usurio (viso), das regras de negcio (controle).

Finalidade
Possibilitar o reuso, facilitar a manuteno, atualizao, deteco e correo de erros.

Estrutura
A estrutura do MVC se faz em trs camadas (Modelo, Viso e Controle). MODELO
Representa o domnio da aplicao, a estrutura dos dados. Tambm pode representar a manipulao dos dados (persistncia e consulta).

VISO
Representa a forma como os dados processados (informaes) sero apresentados ao usurio (interface com o usurio).

CONTROLE
Representa o controle sobre o modelo e a viso, entre o usurio e a aplicao. Encarregando-se de validar as regras de negcio.

Implementao
Vejamos na prtica como funciona. MODELO (Classe Pessoa e Cliente) No modelo temos as classes de dados, que nos mostram a estrutura do sistema, seu domnio. Alm destas classes, alguns tambm implementam as classes de banco nesta camada, as classes DAO. As classes DAO so responsveis por realizarem as gravaes, atualizaes, remoes, alteraes e consultas no banco. Neste tutorial veremos as classes DAO em um pacote separado. O exemplo abaixo mostra uma herana. Classe me (Pessoa) e classe filha (Cliente).

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
public abstract class Pessoa { private int idPessoa; private String nome,logradouro, bairro, numero, telefone, rg, orgaoEmissor, complemento; public Pessoa() { super(); // TODO Auto-generated constructor stub } public Pessoa(int idPessoa, String nome, String logradouro, String bairro, String numero, String telefone, String rg, String orgaoEmissor, String complemento) { super(); this.idPessoa = idPessoa; this.nome = nome; this.logradouro = logradouro; this.bairro = bairro; this.numero = numero; this.telefone = telefone; this.rg = rg; this.orgaoEmissor = orgaoEmissor; this.complemento = complemento; } public String getBairro() { return bairro; } public void setBairro(String bairro) { this.bairro = bairro; } public String getComplemento() { return complemento; } public void setComplemento(String complemento) { this.complemento = complemento; } public int getIdPessoa() { return idPessoa;

public void setIdPessoa(int idPessoa) { this.idPessoa = idPessoa; } public String getLogradouro() { return logradouro; } public void setLogradouro(String logradouro) {

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
this.logradouro = logradouro; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getNumero() { return numero; } public void setNumero(String numero) { this.numero = numero; } public String getOrgaoEmissor() { return orgaoEmissor; } public void setOrgaoEmissor(String orgaoEmissor) { this.orgaoEmissor = orgaoEmissor; } public String getRg() { return rg; } public void setRg(String rg) { this.rg = rg; } public String getTelefone() { return telefone;

public void setTelefone(String telefone) { this.telefone = telefone; } }

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
package modelo; public class Cliente extends Pessoa{ private int codigo; public Cliente() { super(); // TODO Auto-generated constructor stub } public Cliente(int idPessoa, String nome, String logradouro, String bairro, String numero, String telefone, String rg, String orgaoEmissor, int codigo, String complemento) { super(idPessoa, nome, logradouro, bairro, numero, telefone, rg, orgaoEmissor, complemento); this.codigo = codigo; } public Cliente(int codigo) { super(); this.codigo = codigo; } public int getCodigo() { return codigo; } public void setCodigo(int codigo) { this.codigo = codigo; } }

VISO (Classe TelaCliente) Nesta camada temos as classes de comunicao com o usurio, parte grfica. onde o usurio faz uma solicitao ao sistema e ele recebe a resposta a essa solicitao. interessante notar que nesta classe se adiciona o ouvinte ao componente da tela, que ser controlada pela classe de controle (mtodo setOuvinte(ActionListener ouvinte, WindowListener ouv, KeyListener ov)). Tambm importante notar os mtodos de envio de mensagem (mensagem(Object p1,String p2,int p3) e mensagemOpao(Object p1, String p2,int p3,int p4, Icon p5, Object[] p6, Object p7)) que sero solicitados pela classe de controle, caso necessite avisar algo ao usurio. package visao; import javax.swing.Icon; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JLabel; import java.awt.Rectangle; import javax.swing.JTextField; import javax.swing.JButton; import javax.swing.ImageIcon; import java.awt.Point; import java.awt.Dimension; import java.awt.Font; import javax.swing.SwingConstants; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.WindowListener; import java.awt.ComponentOrientation; import java.awt.Insets; import java.awt.Toolkit; import java.text.ParseException; import javax.swing.JFormattedTextField; import javax.swing.text.MaskFormatter; import modelo.Cliente; import javax.swing.WindowConstants; import formatacao.FormataTextField;

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
public class TelaCliente extends JFrame { private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JLabel lblCodigo = null; private JTextField txtCodigo = null; private JLabel lblNome = null; private JTextField txtNome = null; private JLabel lblLogradouro = null; private JTextField txtLogradouro = null; private JLabel lblNumero = null; private JTextField txtNumero = null; private JLabel lblBairro = null; private JTextField txtBairro = null; private JLabel lblTelefone = null; private JButton btnNovo = null; private JButton btnIncluir = null; private JButton btnExcluir = null; private JButton btnAtualizar = null; private JButton btnConsultar = null; private JButton btnCancelar = null; private JLabel lblTopo = null; private JFormattedTextField ftxtTel = null; private JLabel lblRg = null; private JFormattedTextField ftxtRg = null; private JLabel lblOrgaoEmissor = null; private JTextField txtOrgaoEmissor = null; private JLabel lblCodPessoa = null; private JTextField txtCodPessoa = null; private JLabel lblComplemento = null; private JTextField txtComplemento = null; /** * This is the default constructor */ public TelaCliente() { super(); initialize(); } /** * This method initializes this * * @return void */ private void initialize() { this.setSize(651, 312); this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); this.setResizable(false); this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/icones/sisfarmatitulo.png"))); this.setContentPane(getJContentPane()); this.setTitle("SISFarma - Cadastrar Cliente"); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { lblComplemento = new JLabel(); lblComplemento.setBounds(new Rectangle(16, 163, 90, 16)); lblComplemento.setText("Complemento:"); lblCodPessoa = new JLabel(); lblCodPessoa.setBounds(new Rectangle(228, 75, 81, 16)); lblCodPessoa.setText("Cod. Pessoa:"); lblOrgaoEmissor = new JLabel(); lblOrgaoEmissor.setBounds(new Rectangle(376, 195, 131, 15));

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
lblOrgaoEmissor.setText("Orgo Emissor do RG:"); lblRg = new JLabel(); lblRg.setBounds(new Rectangle(451, 75, 37, 14)); lblRg.setText("RG:"); lblTelefone = new JLabel(); lblTelefone.setBounds(new Rectangle(15, 194, 61, 16)); lblTelefone.setText("Telefone:"); lblBairro = new JLabel(); lblBairro.setBounds(new Rectangle(388, 163, 46, 16)); lblBairro.setText("Bairro:"); lblNumero = new JLabel(); lblNumero.setBounds(new Rectangle(474, 135, 61, 16)); lblNumero.setText("Nmero:"); lblLogradouro = new JLabel(); lblLogradouro.setBounds(new Rectangle(15, 135, 76, 16)); lblLogradouro.setText("Logradouro:"); lblNome = new JLabel(); lblNome.setBounds(new Rectangle(15, 105, 46, 16)); lblNome.setText("Nome:"); lblCodigo = new JLabel(); lblCodigo.setBounds(new Rectangle(15, 75, 46, 16)); lblCodigo.setText("Cdigo:"); jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(lblCodigo, null); jContentPane.add(getTxtCodigo(), null); jContentPane.add(lblNome, null); jContentPane.add(getTxtNome(), null); jContentPane.add(lblLogradouro, null); jContentPane.add(getTxtLogradouro(), null); jContentPane.add(lblNumero, null); jContentPane.add(getTxtNumero(), null); jContentPane.add(lblBairro, null); jContentPane.add(getTxtBairro(), null); jContentPane.add(lblTelefone, null); jContentPane.add(getBtnNovo(), null); jContentPane.add(getBtnIncluir(), null); jContentPane.add(getBtnExcluir(), null); jContentPane.add(getBtnAtualizar(), null); jContentPane.add(getBtnConsultar(), null); jContentPane.add(getBtnCancelar(), null); jContentPane.add(getLblTopo(), null); jContentPane.add(getFtxtTel(), null); jContentPane.add(lblRg, null); jContentPane.add(getFtxtRg(), null); jContentPane.add(lblOrgaoEmissor, null); jContentPane.add(getTxtOrgaoEmissor(), null); jContentPane.add(lblCodPessoa, null); jContentPane.add(getTxtCodPessoa(), null); jContentPane.add(lblComplemento, null); jContentPane.add(getTxtComplemento(), null); } return jContentPane; } /** * This method initializes txtCodigo * * @return javax.swing.JTextField */ private JTextField getTxtCodigo() { if (txtCodigo == null) { txtCodigo = new JTextField(); txtCodigo.setBounds(new Rectangle(107, 76, 113, 16)); txtCodigo.setEnabled(false); } return txtCodigo; }

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
/** * This method initializes txtNome * * @return javax.swing.JTextField */ private JTextField getTxtNome() { if (txtNome == null) { txtNome = new JTextField(); txtNome.setBounds(new Rectangle(106, 106, 522, 16)); txtNome.setToolTipText("Nome Completo do Cliente para Cadastro ou Parcial para Consulta"); txtNome.setDocument(new FormataTextField(50)); } return txtNome; } /** * This method initializes txtLogradouro * * @return javax.swing.JTextField */ private JTextField getTxtLogradouro() { if (txtLogradouro == null) { txtLogradouro = new JTextField(); txtLogradouro.setBounds(new Rectangle(105, 134, 354, 16)); txtLogradouro.setToolTipText("Av, Rua, Beco, Travessa onde Reside o Cliente"); txtLogradouro.setDocument(new FormataTextField(25)); } return txtLogradouro; } /** * This method initializes txtNumero * * @return javax.swing.JTextField */ private JTextField getTxtNumero() { if (txtNumero == null) { txtNumero = new JTextField(); txtNumero.setBounds(new Rectangle(561, 135, 68, 16)); txtNumero.setToolTipText("Nmero da Residncia do Cliente"); txtNumero.setDocument(new FormataTextField(6)); } return txtNumero; } /** * This method initializes txtBairro * * @return javax.swing.JTextField */

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
private JTextField getTxtBairro() { if (txtBairro == null) { txtBairro = new JTextField(); txtBairro.setToolTipText("Bairro onde Reside o Cliente"); txtBairro.setLocation(new Point(434, 164)); txtBairro.setSize(new Dimension(194, 16)); txtBairro.setDocument(new FormataTextField(25)); } return txtBairro; } /** * This method initializes btnNovo * * @return javax.swing.JButton */ private JButton getBtnNovo() { if (btnNovo == null) { btnNovo = new JButton(); btnNovo.setLocation(new Point(15, 226)); btnNovo.setSize(new Dimension(89, 30)); btnNovo.setIcon(new ImageIcon(getClass().getResource("/icones/novo.png"))); btnNovo.setFont(new Font("Dialog", Font.BOLD, 12)); btnNovo.setVerticalTextPosition(SwingConstants.CENTER); btnNovo.setVerticalAlignment(SwingConstants.CENTER); btnNovo.setHorizontalAlignment(SwingConstants.CENTER); btnNovo.setHorizontalTextPosition(SwingConstants.RIGHT); btnNovo.setMnemonic(KeyEvent.VK_UNDEFINED); btnNovo.setPreferredSize(new Dimension(96, 40)); btnNovo.setComponentOrientation(ComponentOrientation.UNKNOWN); btnNovo.setToolTipText("Cadastrar Novo Cliente"); btnNovo.setMargin(new Insets(2, 2, 2, 2)); btnNovo.setName(""); btnNovo.setText("Novo"); } return btnNovo; } /** * This method initializes btnIncluir * * @return javax.swing.JButton */ private JButton getBtnIncluir() { if (btnIncluir == null) { btnIncluir = new JButton(); btnIncluir.setIcon(new ImageIcon(getClass().getResource("/icones/incluir.png"))); btnIncluir.setLocation(new Point(119, 226)); btnIncluir.setSize(new Dimension(89, 30)); btnIncluir.setToolTipText("Incluir Novo Cliente"); btnIncluir.setFont(new Font("Dialog", Font.BOLD, 12)); btnIncluir.setAlignmentY(0.5F); btnIncluir.setAutoscrolls(false); btnIncluir.setMargin(new Insets(2, 2, 2, 2)); btnIncluir.setText("Incluir"); }

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
return btnIncluir; } /** * This method initializes btnExcluir * * @return javax.swing.JButton */ private JButton getBtnExcluir() { if (btnExcluir == null) { btnExcluir = new JButton(); btnExcluir.setIcon(new ImageIcon(getClass().getResource("/icones/excluir.png"))); btnExcluir.setLocation(new Point(223, 226)); btnExcluir.setSize(new Dimension(89, 30)); btnExcluir.setToolTipText("Excluir Cliente"); btnExcluir.setMargin(new Insets(2, 2, 2, 2)); btnExcluir.setText("Excluir"); } return btnExcluir; } /** * This method initializes btnAtualizar * * @return javax.swing.JButton */ private JButton getBtnAtualizar() { if (btnAtualizar == null) { btnAtualizar = new JButton(); btnAtualizar.setIcon(new ImageIcon(getClass().getResource("/icones/alterar.png"))); btnAtualizar.setLocation(new Point(327, 226)); btnAtualizar.setSize(new Dimension(89, 30)); btnAtualizar.setToolTipText("Atualizar Dados do Cliente"); btnAtualizar.setMargin(new Insets(2, 2, 2, 2)); btnAtualizar.setText("Atualizar"); } return btnAtualizar; } /** * This method initializes btnConsultar * * @return javax.swing.JButton */ private JButton getBtnConsultar() { if (btnConsultar == null) { btnConsultar = new JButton(); btnConsultar.setIcon(new ImageIcon(getClass().getResource("/icones/consultar.png"))); btnConsultar.setLocation(new Point(431, 226)); btnConsultar.setSize(new Dimension(89, 30)); btnConsultar.setToolTipText("Consultar um Cliente"); btnConsultar.setMargin(new Insets(2, 2, 2, 2)); btnConsultar.setMnemonic(KeyEvent.VK_UNDEFINED); btnConsultar.setText("Consultar");

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
} return btnConsultar; } /** * This method initializes btnCancelar * * @return javax.swing.JButton */ private JButton getBtnCancelar() { if (btnCancelar == null) { btnCancelar = new JButton(); btnCancelar.setIcon(new ImageIcon(getClass().getResource("/icones/cancelar.png"))); btnCancelar.setLocation(new Point(535, 226)); btnCancelar.setSize(new Dimension(89, 30)); btnCancelar.setToolTipText("Cancelar uma Ao"); btnCancelar.setMargin(new Insets(2, 2, 2, 2)); btnCancelar.setText("Cancelar"); } return btnCancelar; } /** * This method initializes lblTopo * * @return javax.swing.JLabel */ private JLabel getLblTopo() { if (lblTopo == null) { lblTopo = new JLabel(); lblTopo.setText("lblTopo"); lblTopo.setIcon(new ImageIcon(getClass().getResource("/imagem/topoCliente.png"))); lblTopo.setBounds(new Rectangle(0, -2, 645, 62)); } return lblTopo; } /** * This method initializes ftxtTel * * @return javax.swing.JFormattedTextField */ private JFormattedTextField getFtxtTel() { if (ftxtTel == null) { try { ftxtTel = new JFormattedTextField(new MaskFormatter("(##)####-####")); ftxtTel.setLocation(new Point(104, 195)); ftxtTel.setSize(new Dimension(106, 16)); ftxtTel.setToolTipText("Telefone de Contato do Cliente. (XX) XXXX-XXXX"); ftxtTel.setFocusLostBehavior(JFormattedTextField.COMMIT); } catch (ParseException e) { // TODO Auto-generated catch block

10

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
this.mensagem("Erro ao Informar o Telefone","Aviso",JOptionPane.WARNING_MESSAGE); } } return ftxtTel; }

public void limparTela() { txtCodPessoa.setText(""); txtCodigo.setText("") ; txtNome.setText("") ; txtLogradouro.setText("") ; txtNumero.setText("") ; txtBairro.setText("") ; ftxtTel.setText("") ; ftxtRg.setText(""); txtOrgaoEmissor.setText(""); txtComplemento.setText(""); txtNome.requestFocus() ; } public void modoInicial() { btnNovo.setEnabled(true) ; btnIncluir.setEnabled(false) ; btnExcluir.setEnabled(false) ; btnAtualizar.setEnabled(false) ; btnConsultar.setEnabled(true) ; btnCancelar.setEnabled(false) ; txtCodigo.setEnabled(false) ; txtNome.setEnabled(true); txtLogradouro.setEnabled(false) ; txtNumero.setEnabled(false) ; txtBairro.setEnabled(false) ; ftxtTel.setEnabled(false) ; ftxtRg.setEnabled(false); txtOrgaoEmissor.setEnabled(false); txtComplemento.setEnabled(false); txtNome.requestFocus(); } public void modoConsultaPessoa() { ftxtRg.requestFocus(true); btnNovo.setEnabled(false) ; btnIncluir.setEnabled(false) ; btnExcluir.setEnabled(false) ; btnAtualizar.setEnabled(false) ; btnConsultar.setEnabled(false) ; btnCancelar.setEnabled(true) ; txtCodigo.setEnabled(false) ; txtNome.setEnabled(false); txtLogradouro.setEnabled(false) ; txtNumero.setEnabled(false) ; txtBairro.setEnabled(false) ; ftxtTel.setEnabled(false) ; ftxtRg.setEnabled(true); txtOrgaoEmissor.setEnabled(false); txtComplemento.setEnabled(false); } public void modoNovo() { btnNovo.setEnabled(false) ; btnIncluir.setEnabled(true) ; btnExcluir.setEnabled(false) ; btnAtualizar.setEnabled(false) ; btnConsultar.setEnabled(false) ; btnCancelar.setEnabled(true) ; txtCodigo.setEnabled(false) ; txtNome.setEnabled(true); txtLogradouro.setEnabled(true) ; txtNumero.setEnabled(true) ; txtBairro.setEnabled(true) ; ftxtTel.setEnabled(true) ; ftxtRg.setEnabled(true); txtOrgaoEmissor.setEnabled(true); txtComplemento.setEnabled(true); txtNome.requestFocus(); } public void modoVenda() { btnNovo.setEnabled(false) ; btnIncluir.setEnabled(true) ; btnExcluir.setEnabled(false) ; btnAtualizar.setEnabled(false) ; btnConsultar.setEnabled(false) ; btnCancelar.setEnabled(false) ;

11

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
txtCodigo.setEnabled(false) ; txtNome.setEnabled(true); txtLogradouro.setEnabled(true) ; txtNumero.setEnabled(true) ; txtBairro.setEnabled(true) ; ftxtTel.setEnabled(true) ; ftxtRg.setEnabled(true); txtOrgaoEmissor.setEnabled(true); txtComplemento.setEnabled(true); txtNome.requestFocus(); } public void modoConsulta() { btnNovo.setEnabled(false) ; btnIncluir.setEnabled(false) ; btnExcluir.setEnabled(true) ; btnAtualizar.setEnabled(true) ; btnConsultar.setEnabled(false) ; btnCancelar.setEnabled(true) ; txtCodigo.setEnabled(false) ; txtNome.setEnabled(true); txtLogradouro.setEnabled(true) ; txtNumero.setEnabled(true) ; txtBairro.setEnabled(true) ; ftxtTel.setEnabled(true) ; ftxtRg.setEnabled(true); txtOrgaoEmissor.setEnabled(true); txtComplemento.setEnabled(true); txtNome.requestFocus(); } public void modoPessoa() { btnNovo.setEnabled(false) ; btnIncluir.setEnabled(true) ; btnExcluir.setEnabled(false) ; btnAtualizar.setEnabled(false) ; btnConsultar.setEnabled(false) ; btnCancelar.setEnabled(true) ; txtCodigo.setEnabled(false) ; txtNome.setEnabled(false); txtLogradouro.setEnabled(false) ; txtNumero.setEnabled(false) ; txtBairro.setEnabled(false) ; ftxtTel.setEnabled(false) ; ftxtRg.setEnabled(false); txtOrgaoEmissor.setEnabled(false); txtComplemento.setEnabled(false); } public void modoNome() { txtNome.setText(""); txtNome.requestFocus(); } public void modoLogradouro() { txtLogradouro.setText(""); txtLogradouro.requestFocus(); } public void modoNumero() { txtNumero.setText(""); txtNumero.requestFocus(); } public void modoBairro() { txtBairro.setText(""); txtBairro.requestFocus(); } public void modoTelefone() { ftxtTel.setText(""); ftxtTel.requestFocus(); } public void modoRg() { ftxtRg.setText(""); ftxtRg.requestFocus();

12

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
} public void modoBloquearRg() { ftxtRg.setEnabled(false); } public void modoOrgaoEmissor() { txtOrgaoEmissor.setText(""); txtOrgaoEmissor.requestFocus(); } public void setOuvinte(ActionListener ouvinte, WindowListener ouv, KeyListener ov) { btnNovo.addActionListener(ouvinte) ; btnIncluir.addActionListener(ouvinte) ; btnExcluir.addActionListener(ouvinte) ; btnAtualizar.addActionListener(ouvinte) ; btnConsultar.addActionListener(ouvinte) ; btnCancelar.addActionListener(ouvinte) ; this.addWindowListener(ouv); ftxtRg.addKeyListener(ov); } public void escreverCliente(Cliente c) { txtCodPessoa.setText(String.valueOf(c.getIdPessoa())); txtCodigo.setText(String.valueOf(c.getCodigo())); txtNome.setText(c.getNome()); txtLogradouro.setText(c.getLogradouro()); txtNumero.setText(c.getNumero()); txtBairro.setText(c.getBairro()); ftxtTel.setText(c.getTelefone()); ftxtRg.setText(c.getRg()); txtOrgaoEmissor.setText(c.getOrgaoEmissor()); txtComplemento.setText(c.getComplemento()); } public void escreverPessoa(Cliente cl) { txtCodPessoa.setText(String.valueOf(cl.getIdPessoa())); txtNome.setText(cl.getNome()); txtLogradouro.setText(cl.getLogradouro()); txtNumero.setText(cl.getNumero()); txtBairro.setText(cl.getBairro()); ftxtTel.setText(cl.getTelefone()); ftxtRg.setText(cl.getRg()); txtOrgaoEmissor.setText(cl.getOrgaoEmissor()); txtComplemento.setText(cl.getComplemento()); } public Cliente lerCliente() { Cliente c = new Cliente(); try { String nome = txtNome.getText(); String logradouro = txtLogradouro.getText(); String numero = txtNumero.getText(); String bairro = txtBairro.getText(); String telefone = ftxtTel.getText(); String cod = txtCodigo.getText(); String rg = ftxtRg.getText(); String oe = txtOrgaoEmissor.getText(); String codP = txtCodPessoa.getText(); String complemento = txtComplemento.getText(); int codigo; int codigoP; if(cod.equals("") || cod == null)

13

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
codigo = 0; else codigo = Integer.parseInt(cod); if(codP.equals("") || codP == null) codigoP = 0; else codigoP = Integer.parseInt(codP); telefone = telefone.replaceAll("\\(" , "").replaceAll("\\)", "").replaceAll("-", "").replaceAll(" ", ""); rg = rg.replaceAll("[-.]" , "").replaceAll(" ", ""); c.setIdPessoa(codigoP); c.setCodigo(codigo); c.setNome(nome); c.setLogradouro(logradouro); c.setNumero(numero); c.setBairro(bairro); c.setTelefone(telefone); c.setRg(rg); c.setOrgaoEmissor(oe); c.setComplemento(complemento); } // fim do try catch(NumberFormatException e) {this.mensagem("Tipo de Dado Invlido","Aviso",JOptionPane.ERROR_MESSAGE) ;} catch(NullPointerException e) {this.mensagem("Erro ao Criar o Objeto","Aviso",JOptionPane.ERROR_MESSAGE) ;} catch(Exception e) {this.mensagem("Erro","Aviso",JOptionPane.ERROR_MESSAGE) ;} return c ; } public String lerRg() { String rg = ftxtRg.getText(); rg = rg.replaceAll("[-.]" , "").replaceAll(" ", ""); return rg; } public void mensagem(Object p1,String p2,int p3) { JOptionPane.showMessageDialog(null, p1,p2,p3); } public int mensagemOpao(Object p1, String p2,int p3,int p4, Icon p5, Object[] p6, Object p7) { return JOptionPane.showOptionDialog(null, p1, p2, p3, p4, p5, p6, p7); } /** * This method initializes ftxtRg * * @return javax.swing.JFormattedTextField */

14

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
private JFormattedTextField getFtxtRg() { if (ftxtRg == null) { try { ftxtRg = new JFormattedTextField(new MaskFormatter("##.###.###-#")); ftxtRg.setBounds(new Rectangle(493, 75, 137, 15)); ftxtRg.setSize(new Dimension(92, 16)); ftxtRg.setToolTipText("Regitro Geral do Cliente. Pressione Enter para Continuar o Cadastro"); ftxtRg.setFocusLostBehavior(JFormattedTextField.COMMIT); } catch (ParseException e) { this.mensagem("Erro ao Informar o RG","Aviso",JOptionPane.WARNING_MESSAGE); } } return ftxtRg; } /** * This method initializes txtOrgaoEmissor * * @return javax.swing.JTextField */ private JTextField getTxtOrgaoEmissor() { if (txtOrgaoEmissor == null) { txtOrgaoEmissor = new JTextField(); txtOrgaoEmissor.setBounds(new Rectangle(508, 195, 122, 16)); txtOrgaoEmissor.setToolTipText("rgo Emissor do Registro Geral do Cliente"); txtOrgaoEmissor.setDocument(new FormataTextField(6)); } return txtOrgaoEmissor; } /** * This method initializes txtCodPessoa * * @return javax.swing.JTextField */ private JTextField getTxtCodPessoa() { if (txtCodPessoa == null) { txtCodPessoa = new JTextField(); txtCodPessoa.setLocation(new Point(310, 75)); txtCodPessoa.setEnabled(false); txtCodPessoa.setSize(new Dimension(113, 16)); } return txtCodPessoa; } /** * This method initializes txtComplemento * * @return javax.swing.JTextField */ private JTextField getTxtComplemento() {

15

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
if (txtComplemento == null) { txtComplemento = new JTextField(); txtComplemento.setLocation(new Point(104, 164)); txtComplemento.setSize(new Dimension(275, 16)); txtComplemento.setToolTipText("Complemento do Endereo do Cliente"); txtComplemento.setDocument(new FormataTextField(25)); } return txtComplemento; } } // @jve:decl-index=0:visual-constraint="10,10"

CONTROLE (Classe ControleCliente) Todo o controle fica nas classes desta camada. Interessante que cada tela tenha uma classe que a controla, pois fica mais fcil de identificar um problema e resolv-lo. Pois caso faa um classe de controle para todo o sistema, ela ficar enorme. Reparem, que logo no construtor ele j seta o mtodo setOuvinte() da viso e passa this como parmetro, indicando que ele est tomando conta de qualquer solicitao que o usurio fizer na tela (tela.setOuvinte(this, this,this)). Podemos tambm notar que no mtodo actionPerformed(ActionEvent e), ele faz toda a validao, aplicando as regras de negcio, por exemplo, o cliente obrigatoriamente precisa informar o RG para ser cadastrado.
if(cl.getRg().equals("") || cl.getRg() == null || cl.getRg().length() > 0 && cl.getRg().length() < 9 || cl.getRg().equals("000000000"))

{tela.mensagem("Informe o RG", "Mensagem", JOptionPane.WARNING_MESSAGE); tela.modoRg();} Reparem que o controle solicita que a viso exiba uma mensagem (tela.mensagem("Informe o RG", "Mensagem", JOptionPane.WARNING_MESSAGE)) e que o DAO inclua os dados do cliente no banco (dao.gravarCliente(cl)). package controle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.sql.SQLException; import java.util.ArrayList; import javax.swing.JOptionPane; import modelo.Cliente; import dao.DaoCliente; import visao.TelaCliente; import visao.TelaPesquisa; public class ControleCliente extends WindowAdapter implements ActionListener, KeyListener{ private TelaCliente tela = null ; private DaoCliente dao = null ; private Cliente cl = null; private ControleVenda cv = null; private ArrayList<Cliente> lista = null; private boolean venda = false; private ControleTelaFarmacia cf = null; private boolean fechar = true; public ControleCliente(TelaCliente tela, ControleVenda cv,boolean v) { super(); this.tela = tela ; this.cv = cv; venda = v; tela.setOuvinte(this, this,this); tela.modoVenda(); try { dao = new DaoCliente() ; } catch (ClassNotFoundException e) { tela.mensagem("Erro ao carregar o driver","Aviso",JOptionPane.ERROR_MESSAGE); }

16

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
catch (SQLException e) { tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE); } } public ControleCliente(TelaCliente tela) { super(); this.tela = tela ; tela.modoInicial(); tela.setOuvinte(this,this,this); try { dao = new DaoCliente() ; } catch (ClassNotFoundException e) { tela.mensagem("Erro ao carregar o driver","Aviso",JOptionPane.ERROR_MESSAGE); } catch (SQLException e) { tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE); } } public ControleCliente(TelaCliente tela, ControleTelaFarmacia c) { super(); this.tela = tela ; cf = c; tela.modoInicial(); tela.setOuvinte(this,this,this); try { dao = new DaoCliente() ; } catch (ClassNotFoundException e) { tela.mensagem("Erro ao carregar o driver","Aviso",JOptionPane.ERROR_MESSAGE); } catch (SQLException e) { tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE); } } public void actionPerformed(ActionEvent e) { String comando = e.getActionCommand(); if (comando.equals("Novo")) { tela.limparTela(); tela.modoConsultaPessoa();} else if(comando.equals("Incluir")) incluirCliente(); else if(comando.equals("Cancelar")) {tela.limparTela(); tela.modoInicial();} else

17

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
if(comando.equals("Atualizar")) alterarCliente(); else if(comando.equals("Excluir")) excluirCliente(); else if(comando.equals("Consultar")) consultarCliente();

} public void incluirCliente() { cl = tela.lerCliente(); int autoNumeracao = 0; if(cl != null) if(cl.getNome().equals("") || cl.getNome() == null) {tela.mensagem("Informe o Nome", "Mensagem", JOptionPane.WARNING_MESSAGE); tela.modoNome();} else if(cl.getLogradouro().equals("") || cl.getLogradouro() == null) {tela.mensagem("Informe o Logradouro", "Mensagem", JOptionPane.WARNING_MESSAGE); tela.modoLogradouro();} else if(cl.getNumero().equals("") || cl.getNumero() == null) {tela.mensagem("Informe o Nmero", "Mensagem", JOptionPane.WARNING_MESSAGE); tela.modoNumero();} else if(cl.getBairro().equals("") || cl.getBairro() == null) {tela.mensagem("Informe o Bairro", "Mensagem", JOptionPane.WARNING_MESSAGE); tela.modoBairro();} else if(cl.getTelefone().length() > 0 && cl.getTelefone().length() < 10 || cl.getTelefone().equals("0000000000")) {tela.mensagem("Telefone Incorreto", "Mensagem", JOptionPane.WARNING_MESSAGE); tela.modoTelefone();} else if(cl.getRg().equals("") || cl.getRg() == null || cl.getRg().length() > 0 && cl.getRg().length() < 9 || cl.getRg().equals("000000000") ) {tela.mensagem("Informe o RG", "Mensagem", JOptionPane.WARNING_MESSAGE); tela.modoRg();} else if(cl.getOrgaoEmissor().equals("") || cl.getOrgaoEmissor() == null) {tela.mensagem("Informe o Orgo Emissor", "Mensagem", JOptionPane.WARNING_MESSAGE); tela.modoOrgaoEmissor();} else

18

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
try { if(dao.buscarCliente(cl.getIdPessoa())) {tela.mensagem("Cliente j Cadastrado", "Mensagem", JOptionPane.WARNING_MESSAGE); tela.limparTela(); tela.modoConsultaPessoa();} else try{ {autoNumeracao = dao.obterIdCliente() + 1; cl.setCodigo(autoNumeracao); Object[] opcoes = {"Sim", "No" } ; int resp = tela.mensagemOpao("Confirma os Dados?", "Confirmao", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, opcoes, opcoes[0]); if (resp==0) { if(cl.getIdPessoa() == 0) {autoNumeracao = dao.obterIdPessoa() + 1; cl.setIdPessoa(autoNumeracao); dao.gravarPessoa(cl);} dao.gravarCliente(cl); tela.mensagem("Cliente " + cl.getNome() + " foi Includo com Sucesso!","Aviso",JOptionPane.INFORMATION_MESSAGE) ; if(venda) {cv.inserirCliente(cl); tela.dispose(); } else { tela.limparTela(); tela.modoInicial();} }// fim da pergunta }// fim do else }// fim do try catch (SQLException e) { tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE) ; tela.limparTela(); tela.modoInicial(); } catch (Exception e) { tela.mensagem("Erro","Aviso",JOptionPane.ERROR_MESSAGE) ; tela.limparTela(); tela.modoInicial(); } } catch (SQLException e) { tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE) ; tela.limparTela(); tela.modoInicial();} catch (Exception e) { tela.mensagem("Erro","Aviso",JOptionPane.ERROR_MESSAGE) ; tela.limparTela(); tela.modoInicial();}

19

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
else {tela.mensagem("Operao no realizada", "Mensagem", JOptionPane.INFORMATION_MESSAGE); tela.limparTela(); tela.modoInicial(); } } public void alterarCliente() { cl = tela.lerCliente(); if(cl != null && cl.getCodigo() != 0) if(cl.getNome().equals("") || cl.getNome() == null) {tela.mensagem("Informe o Nome", "Mensagem", JOptionPane.WARNING_MESSAGE); tela.modoNome();} else if(cl.getLogradouro().equals("") || cl.getLogradouro() == null) {tela.mensagem("Informe o Logradouro", "Mensagem", JOptionPane.WARNING_MESSAGE); tela.modoLogradouro();} else if(cl.getNumero().equals("") || cl.getNumero() == null) {tela.mensagem("Informe o Nmero", "Mensagem", JOptionPane.WARNING_MESSAGE); tela.modoNumero();} else if(cl.getBairro().equals("") || cl.getBairro() == null) {tela.mensagem("Informe o Bairro", "Mensagem", JOptionPane.WARNING_MESSAGE); tela.modoBairro();} else if(cl.getTelefone().length() > 0 && cl.getTelefone().length() < 10 || cl.getTelefone().equals("0000000000")) {tela.mensagem("Telefone Incorreto", "Mensagem", JOptionPane.WARNING_MESSAGE); tela.modoTelefone();} else try { { Object[] opcoes = {"Sim", "No" } ; int resp = tela.mensagemOpao("Confirma os Dados?", "Confirmao", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, opcoes, opcoes[0]); if (resp==0) { dao.alterarCliente(cl); tela.mensagem("Cliente " + cl.getNome() + " foi Alterado com Sucesso!","Aviso",JOptionPane.INFORMATION_MESSAGE) ; tela.limparTela(); tela.modoInicial(); }// fim da pegunta } } // fim do try catch (SQLException e) {

20

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE) ; tela.limparTela(); tela.modoInicial(); } catch (Exception e) { tela.mensagem("Erro","Aviso",JOptionPane.ERROR_MESSAGE) ; tela.limparTela(); tela.modoInicial(); } else {tela.mensagem("Operao no realizada", "Mensagem", JOptionPane.INFORMATION_MESSAGE); tela.limparTela(); tela.modoInicial(); } } public void excluirCliente() { cl = tela.lerCliente(); if(cl != null && cl.getCodigo() != 0) { Object[] opcoes = {"Sim", "No" } ; int resp = tela.mensagemOpao("Confirma a excluso?", "Excluir", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, opcoes, opcoes[0]); if (resp==0) { try { dao.excluirCliente(cl); } catch (SQLException e) { tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE) ; tela.limparTela(); tela.modoInicial(); } catch (Exception e) { tela.mensagem("Erro","Aviso",JOptionPane.ERROR_MESSAGE) ; tela.limparTela(); tela.modoInicial(); } tela.mensagem("Cliente " + cl.getNome() + " foi Excludo com Sucesso!","Aviso",JOptionPane.INFORMATION_MESSAGE) ; tela.limparTela(); tela.modoInicial();

21

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
} } else tela.mensagem("Operao no realizada", "Mensagem", JOptionPane.INFORMATION_MESSAGE); } public void consultarCliente() { cl = tela.lerCliente(); if(cl != null) //if(cl.getNome().equals("") || cl.getNome() == null) //{tela.mensagem("Informe o Nome do Cliente para a Pesquisa", "Mensagem", JOptionPane.WARNING_MESSAGE); //tela.modoInicial();} //else {try { //lista = new ArrayList<Pessoa>(); lista = new ArrayList<Cliente>(); //lista = dao.consultarCliente(cl); lista = dao.consultarCliente(cl); } catch (SQLException e) { tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE) ; tela.limparTela(); tela.modoInicial(); } catch (Exception e) { tela.mensagem("Erro","Aviso",JOptionPane.ERROR_MESSAGE) ; tela.limparTela(); tela.modoInicial(); } if (lista.size() == 1) {tela.mensagem("Cliente Encontrado", "Mensagem", JOptionPane.INFORMATION_MESSAGE); tela.escreverCliente(lista.get(0)); tela.modoConsulta(); } else if(lista.size() == 0) {tela.mensagem("Cliente no Encontrado", "Mensagem", JOptionPane.INFORMATION_MESSAGE); tela.limparTela();

22

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
tela.modoInicial(); } else if(lista.size()>1 || cl.getNome().equals("")) {TelaPesquisa janela = new TelaPesquisa(); new ControlePesquisa(janela, this, lista, null, "Cliente") ; janela.setLocationRelativeTo(null); janela.setVisible(true); fechar = false; }

} } public void escreverCliente(Cliente cl) { tela.escreverCliente(cl); tela.modoConsulta(); } public void windowClosing(WindowEvent e){ if(venda == false)// janela do menu cadastro { if(fechar) {tela.dispose(); cf.desbloquearMenu(); } } else {cv.setCliente(false); tela.dispose(); } try { dao.finalize(); } catch (SQLException e1) { tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE) ; } } public void setFechar(boolean f) { fechar = f; } public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); if(key == KeyEvent.VK_ENTER)

23

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
{ consultarPessoa(); } } public void consultarPessoa() { try { cl = new Cliente(); cl = dao.buscarPessoa(tela.lerRg()); if(cl != null) // pessoa cadastrada { tela.escreverPessoa(cl); tela.modoPessoa(); } else { tela.modoNovo(); tela.modoBloquearRg(); } } catch (SQLException e1) { tela.mensagem("Operao no realizada","Aviso",JOptionPane.ERROR_MESSAGE) ; } catch (Exception e1) { tela.mensagem("Erro","Aviso",JOptionPane.ERROR_MESSAGE) ; } } public void keyReleased(KeyEvent arg0) { // TODO Auto-generated method stub } public void keyTyped(KeyEvent arg0) { // TODO Auto-generated method stub } }// fim do controle

DAO (Classe DAOCliente) Aqui temos a classe responsvel por manipular os dados com o banco. Incluso, alterao, excluso, consultar. package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import modelo.Cliente; public class DaoCliente { private Connection c; private PreparedStatement ps = null;

private ResultSet r = null;

24

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
public DaoCliente() throws ClassNotFoundException, SQLException { super(); c = Conexao.getConexao(); } public int obterIdPessoa() throws SQLException, Exception {int i = 0; ps = c.prepareStatement("select max(idpessoa) from pessoa"); r = ps.executeQuery(); if(r.next()) i = r.getInt(1); return i ; } public int obterIdCliente() throws SQLException, Exception {int i = 0; ps = c.prepareStatement("select max(codigo) from cliente"); r = ps.executeQuery(); if(r.next()) i = r.getInt(1); return i ; } public void gravarPessoa(Cliente cl) throws SQLException, Exception { ps = c.prepareStatement("insert into pessoa values (?,?,?,?,?,?,?,?,?)"); ps.setInt(1, cl.getIdPessoa()); ps.setString(2, cl.getNome()); ps.setString(3, cl.getLogradouro()); ps.setString(4, cl.getNumero()); ps.setString(5, cl.getBairro()); ps.setString(6, cl.getTelefone()); ps.setString(7, cl.getRg()); ps.setString(8, cl.getOrgaoEmissor()); ps.setString(9, cl.getComplemento()); ps.executeUpdate(); } public void gravarCliente(Cliente cl) throws SQLException, Exception { ps = c.prepareStatement("insert into cliente values (?,?)"); ps.setInt(1, cl.getCodigo()); ps.setInt(2, cl.getIdPessoa());

25

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
ps.executeUpdate(); } public void alterarCliente(Cliente cl) throws SQLException, Exception { ps = c.prepareStatement("update pessoa set nome=?,logradouro=?,numero=?,bairro=?,telefone=?, rg=?, orgaoemissor=?, complemento=? where idpessoa in (select idpessoa from cliente where codigo = ?)"); ps.setString(1, cl.getNome()); ps.setString(2, cl.getLogradouro()); ps.setString(3, cl.getNumero()); ps.setString(4, cl.getBairro()); ps.setString(5, cl.getTelefone()); ps.setString(6, cl.getRg()); ps.setString(7, cl.getOrgaoEmissor()); ps.setString(8, cl.getComplemento()); ps.setInt(9, cl.getCodigo()); ps.executeUpdate(); /* ps = c.prepareStatement("update cliente set rg=?,orgaoemissor=? where idcliente=?"); //ps.setString(1, cl.getRg()); //ps.setString(2, cl.getOrgaoEmissor()); ps.setInt(3, cl.getCodigo()); ps.executeUpdate(); */ } public void excluirCliente(Cliente cl) throws SQLException, Exception { ps = c.prepareStatement("delete from cliente where codigo=?"); ps.setInt(1, cl.getCodigo()); ps.executeUpdate(); } public ArrayList<Cliente> consultarCliente(Cliente cl) throws SQLException, Exception { //ArrayList<Pessoa> lista = new ArrayList<Pessoa>(); ArrayList<Cliente> lista = new ArrayList<Cliente>(); ps = c.prepareStatement("select cliente.codigo, pessoa.* from cliente, pessoa where cliente.idpessoa = pessoa.idpessoa and cliente.idpessoa in (select idpessoa from pessoa where nome ilike ?)order by nome"); ps.setString(1, cl.getNome()+ "%"); r = ps.executeQuery(); while (r.next()) {

26

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
cl = new Cliente(); cl.setIdPessoa(r.getInt("idpessoa")); cl.setCodigo(r.getInt("codigo")); cl.setNome(r.getString("nome")); cl.setLogradouro(r.getString("logradouro")); cl.setNumero(r.getString("numero")); cl.setBairro(r.getString("bairro")); cl.setTelefone(r.getString("telefone")); cl.setRg(r.getString("rg")); cl.setOrgaoEmissor(r.getString("orgaoemissor")); cl.setComplemento(r.getString("complemento")); lista.add(cl); } return lista; } public Cliente buscarPessoa(String rg) throws SQLException, Exception { Cliente cl = null; ps = c.prepareStatement("select * from pessoa where rg=? "); ps.setString(1, rg); r = ps.executeQuery(); if(r.next()) { cl = new Cliente(); cl.setIdPessoa(r.getInt("idpessoa")); cl.setNome(r.getString("nome")); cl.setLogradouro(r.getString("logradouro")); cl.setNumero(r.getString("numero")); cl.setBairro(r.getString("bairro")); cl.setTelefone(r.getString("telefone")); cl.setRg(r.getString("rg")); cl.setOrgaoEmissor(r.getString("orgaoemissor")); cl.setComplemento(r.getString("complemento")); } return cl; } public boolean buscarCliente(int codP) throws SQLException, Exception

27

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br
{ boolean resultado = false; ps = c.prepareStatement("select codigo from cliente where idpessoa=? "); ps.setInt(1, codP); r = ps.executeQuery(); if(r.next()) { resultado = true; } return resultado; } public void desfazerBanco() throws SQLException, Exception { c.rollback(); } public void finalize() throws SQLException { if(r != null) { r.close() ; ps.close(); } c.close(); } }// fim do dao

28

29

MVC (model-view-controller) Aplicaes Desktop

www.tiacademicoweb.xpg.com.br

Concluso
O MVC funciona como um corpo humano. O controle o crebro, que faz todo o controle do corpo. Recebe requisies e dispara estmulos a reas especficas do corpo para atender as requisies. Nossas caractersticas fsicas, bem como nossa personalidade, seria o modelo, a estrutura. J nossos sentidos, como audio, viso, fala, olfato, tato e paladar seriam a viso, pois funciona como a entrada e sada de informaes (observar uma imagem, sorrir, chorar, comer).

29

Você também pode gostar