Exemplo claro de MVC

6 respostas
R

E ai galera… Salve!

Alguém tem um exemplo bom de mvc? eu achei esse na net
http://java.sun.com/developer/technicalArticles/javase/mvc/ só que tá meio confuso (não por causa do Inglês) mas na entendi direito o Model (modelo). Os valores precisam ficar fixos? Como fazer se for banco (SQL)?

Por enquanto valew!
Abraços…
Ricardo

6 Respostas

A

O nome Model não é tão amigável, o Model na verdade são os dados que pode ser de um banco de dados, uma lista etc.

Tem livros de design patterns que explica como implementar em MVC um deles é Head First, isso para ambiente desktop e tem o MVC2 que é para WEB ai é mais fácil aprender Struts, JSF etc.

http://www.temporeal.com.br/produtos.php?id=171609

yoshikichi

rickzale:
E ai galera… Salve!

Alguém tem um exemplo bom de mvc? eu achei esse na net
http://java.sun.com/developer/technicalArticles/javase/mvc/ só que tá meio confuso (não por causa do Inglês) mas na entendi direito o Model (modelo). Os valores precisam ficar fixos? Como fazer se for banco (SQL)?

Por enquanto valew!
Abraços…
Ricardo

Leia isso, vc vai curtir.
http://www.guj.com.br/posts/list/99494.java#536047

peczenyj

Caso queira ver um exemplo prático, no capitulo 13 fala só sobre isso :

E veja este artigo:

http://fragmental.com.br/wiki/index.php/MVC_e_Camadas

D

Eu, quando estava começando em Java Web, tarefa essa que foi difícil devido ao meu histórico de utilização com Python, Ruby, PHP e outras, tb tive problemas. O que achei mais claro foi neste livro:

Desenvolvendo Aplicações Web com JSP, SERVLETS, JAVASERVER FACES, HIBERNATE, EJB 3 PERSISTENCE E AJAX

Foi o que me tornou fã dele. Ele fez uma explicação tão simples que só uma anta não aprenderia. Quando entra no MVC, ele passa depois suavemente para o Hibernate, JSF e depois com JPA (a.k.a EJB 3 Persistence). Pronto, clareou tudo.
Quanto a indicação do peczenyj, não concordo totalmente com o artigo do site Fragmental. Primeiro porque ele faz um uso de termos camadas que vai de encontro ao termo Layers usado no MVC pela própria SUN. Sugiro que leia bem o material da SUN, já que estamos usando Java. Mesmo que alguns achem o argumento bom, levo em consideração as informações oficiais da tecnologia em questão.

R
Seguinte: tem essas classes! Gostaria de saber se são mesmo o View e o Model e o que falta no controler. Segue as mesmas: View:
import java.awt.event.*;   
import javax.swing.*;   
import java.awt.*;   
import java.sql.*;   

public class ListaFamilias extends javax.swing.JFrame {
  
   public Connection con = null;   
   public Statement stm = null;   
   public ResultSet rs; 
   public String titulo;
   
   public String pegaTitulo(String str){
   str = titulo;
   return str;
   }

   
    public ListaFamilias() {
        initComponents();
        setLocationRelativeTo(null);
        ListaFamiliasM m = new ListaFamiliasM();
        m.atualizaLista(lstFamilias);
        setIconImage(Toolkit.getDefaultToolkit().getImage("c:\\ricardo\\telas\\sgod.jpg"));
    }
    
    // <editor-fold defaultstate="collapsed" desc=" Código Gerado ">//GEN-BEGIN:initComponents
    private void initComponents() {
        jScrollPane1 = new javax.swing.JScrollPane();
        lstFamilias = new javax.swing.JList();
        btnSeleciona = new javax.swing.JButton();
        btnSair = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Familias");
        setResizable(false);
        jScrollPane1.setViewportView(lstFamilias);

        btnSeleciona.setText("Seleciona");
        btnSeleciona.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSelecionaActionPerformed(evt);
            }
        });

        btnSair.setText("Sair");
        btnSair.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSairActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 213, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(btnSeleciona)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 85, Short.MAX_VALUE)
                        .addComponent(btnSair)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 169, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnSeleciona)
                    .addComponent(btnSair))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnSelecionaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSelecionaActionPerformed
    titulo = (String) lstFamilias.getSelectedValue();
    JOptionPane.showMessageDialog(null,"Familia Selecionada:\n"+titulo,"Familias",JOptionPane.INFORMATION_MESSAGE);   
    //telaPrincipal.setTitle(titulo);
    }//GEN-LAST:event_btnSelecionaActionPerformed

    private void btnSairActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSairActionPerformed
    dispose();
    }//GEN-LAST:event_btnSairActionPerformed
    
    public static void main(String args[]) {
    try{
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch (UnsupportedLookAndFeelException e) {
       // handle exception
    }
    catch (ClassNotFoundException e) {
       // handle exception
    }
    catch (InstantiationException e) {
       // handle exception
    }
    catch (IllegalAccessException e) {
       // handle exception
    }   
     
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ListaFamilias().setVisible(true);
            }
        });
    }
    
    // Declaração de variáveis - não modifique//GEN-BEGIN:variables
    private javax.swing.JButton btnSair;
    private javax.swing.JButton btnSeleciona;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JList lstFamilias;
    // Fim da declaração de variáveis//GEN-END:variables
    
}
Model:
import java.awt.event.*;   
import javax.swing.*; 
import java.awt.*;   
import java.io.*;
import java.sql.*;
   
public class ListaFamiliasM {
   
   public Connection con = null;   
   public Statement stm = null;   
   public ResultSet rs; 
   
   public JList lstFamilias;

    public ListaFamiliasM() {
        }
    
    public void atualizaLista(JList lista){
    lstFamilias = lista;
    DefaultListModel dlm = new DefaultListModel();
    lstFamilias.setModel(dlm);   
    try  
      {  
         Class.forName("com.mysql.jdbc.Driver");
         con = DriverManager.getConnection("jdbc:mysql://localhost/dbsgod", "root", "");
         stm = con.createStatement();
         rs = stm.executeQuery("select * from familia");
	while(rs.next()){
        dlm.addElement(rs.getString(4));
        }//fim while
      }//fim try
      catch(Exception e)
      {
      JOptionPane.showMessageDialog(null,"Apresente este erro\nao desenvolvedor do sistema.","E R R O",JOptionPane.INFORMATION_MESSAGE);   
      e.printStackTrace();
      }//fim catch
    }
    
}
Controler (se falta ou alguma coisa e é mesmo controler):
public class ListaFamiliasC {
    
    public ListaFamiliasC() {
    }
    public void atualizaLista(){
    }
}

Por enquanto valew!
Ricardo

R

Gente! Ninguém? :(Precisava de uma orientação para essas classes e ver se existe algum erro (nelas ou em mim!)

Abraços

ricardo

Criado 26 de dezembro de 2008
Ultima resposta 23 de jan. de 2009
Respostas 6
Participantes 5