Olá a todos, sei que esse assunto já foi discutido aqui e acreditem que me basiei nos tópicos do GUJ e de muitos outros, fiz um sistema de forma academica usando MVC+DAO, mas o meu problema é que eu tentei usar a base teorica para implementar algo na Pratica, vou postar meus códigos que estão funcionais e colocar algumas duvidas que fiquei em relação a esses modelos.
Criei 4 pacotes e as classes que possuem:
banco - (aqui eu coloco o DAO)
- Conexao.java
- DaoCi.java
controle
- ControleCi.java
- SessionFacade.java
modelo
- Ci.java
visao
- TelaCadastro.java
Como o sistema funciona:
TelaCadastroCI usuario cadastra um numero e envia ao SessionFacade que envia o objeto para DaoCi que executa o inserir - Claro que uso a classe Ci.java com os Bens e a classe conexão.
Duvidas:
[color=darkblue]- Em relação ao padrão MVC+DAO, essa minha estrutura esta certa?
- A classe SessionFacade esta servindo como uma classe de ligação entrea visão e a classe de controle ControleCi.java, li que isso é bom para caso eu queria criar uma visão diferente, basta criar uma classe session diferente acessando a mesma classe de controle que fica mais facil, eu achei meio redundante, mas isso esta certo?
- Por enquanto não encotrei nenhuma regra de negocio que seja implementado na camada de modelo, só conexões com o banco, por isso coloquei no pacote banco que aonde ficar minha persistencia, no caso a unica coisa diferente é que eu faço uma busca se existe o numro da Ci antes de inserir. isso esta certo?
- na camada de visão eu acabo verificando atraves do try se o valor cadastrado é um numero e não uma String, isso esta certo ? eu sei que verificações deveriam ficar na camada de modelo, mas estou tendo dificuldade de fazer isso, pois como é um tipo int, o textfield tem que ser convertido para Inteiro e de qualquer forma va idar erro se eu não verificar isso com o try.
- Alguem tem algum comentário sobre a forma q estou programando?
- A forma que estou usando o DAO esta certa? estou achando entrano pois tenho duas classes, uma conexão e a outra seria o DaoCi, estou achando estranho que dessa forma eu tenho que replicar o login e a senha em cada classe DAO eu acharia que ela estaria melhor na classe conexão, o que fazer?[/color]
Abraços a todos e segue as classes (pelo menos os que eu achei relevantes):
package visao;
import java.awt.BorderLayout;
import javax.swing.*;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import java.awt.GridBagConstraints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import modelo.Ci;
import controle.SessionFacade;
public class TelaCadastroCi extends JFrame implements ActionListener {
private JPanel jContentPane = null;
private JPanel jPanel = null;
private JLabel jLabel = null;
private JTextField jTextField = null;
private JButton jButton = null;
private JLabel jLabel1 = null;
private JPanel getJPanel() {
if (jPanel == null) {
GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
gridBagConstraints5.gridx = 2;
gridBagConstraints5.gridy = 1;
GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
gridBagConstraints4.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints4.gridy = 1;
gridBagConstraints4.weightx = 1.0;
gridBagConstraints4.gridx = 1;
GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
gridBagConstraints3.gridx = 0;
gridBagConstraints3.gridy = 1;
jLabel1 = new JLabel();
jLabel1.setText("Texto 2 :");
GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
gridBagConstraints2.gridx = 2;
gridBagConstraints2.gridy = 0;
GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints1.gridy = 0;
gridBagConstraints1.weightx = 1.0;
gridBagConstraints1.gridx = 1;
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
jLabel = new JLabel();
jLabel.setText("Texto 1 :");
jPanel = new JPanel();
jPanel.setLayout(new GridBagLayout());
jPanel.add(jLabel, gridBagConstraints);
jPanel.add(getJTextField(), gridBagConstraints1);
jPanel.add(getJButton(), gridBagConstraints2);
jPanel.add(jLabel1, gridBagConstraints3);
}
return jPanel;
}
private JTextField getJTextField() {
if (jTextField == null) {
jTextField = new JTextField();
}
return jTextField;
}
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setText("click 1");
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
// System.out.println("Seu evento aqui");
// TODO Auto-generated Event stub actionPerformed()
try{
SessionFacade sf = new SessionFacade();
Ci ci = new Ci();
ci.setNumero(Integer.parseInt(jTextField.getText()));
sf.cadastrarCi(ci);
}catch(Exception erroGravar){
JOptionPane.showMessageDialog(null, "Verifiquei se todos os campos estão de acordo"+erroGravar);
}
}
});
}
return jButton;
}
public static void main(String[] args) {
TelaCadastroCi abas = new TelaCadastroCi();
abas.setVisible(true);
}
public TelaCadastroCi() {
super();
initialize();
}
private void initialize() {
this.setSize(300, 200);
this.setContentPane(getJPanel());
this.setTitle("JFrame");
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
}
package controle;
import modelo.Ci;
public class SessionFacade {
Ci mc = new Ci();
ControleCi cc = new ControleCi();
public void cadastrarCi(Ci ci) {
cc.iserirCi(ci);
}
}
package controle;
import banco.DaoCi;
import modelo.Ci;
public class ControleCi {
DaoCi daoCi = new DaoCi();
public void iserirCi(Ci ci){
daoCi.insere(ci);
}
}
package banco;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.sql.*;
import javax.swing.JOptionPane;
import modelo.Ci;
public class DaoCi {
private final String URL = "jdbc:mysql://localhost:3306/cidigital",
NOME = "root", SENHA = "asenha";
private Connection con;
private Statement comando;
public void apagar(String rg) {
conectar();
try {
comando
.executeUpdate("DELETE FROM ci WHERE numero = '" + rg
+ "';");
} catch (SQLException e) {
imprimeErro("Erro ao apagar ci", e.getMessage());
} finally {
fechar();
}
}
public Ci[] buscarTodos() {
conectar();
String sql = "SELECT * FROM ci";
ArrayList<Ci> resultados = new ArrayList<Ci>();
ResultSet rs;
try {
PreparedStatement p = con.prepareStatement(sql);
rs = p.executeQuery();
while (rs.next()) {
Ci temp = new Ci();
temp.setNumero(rs.getInt("numero"));
resultados.add(temp);
}
return (Ci[])resultados.toArray(new Ci[0]);
} catch (SQLException e) {
imprimeErro("Erro ao buscar ci", e.getMessage());
return null;
}
}
public void atualizar(Ci ci) {
conectar();
String com = "UPDATE ci SET numero = '" + ci.getNumero()
+ "' WHERE numero = '" + ci.getNumero() + "';";
System.out.println("Atualizada!");
try {
comando.executeUpdate(com);
} catch (SQLException e) {
e.printStackTrace();
} finally {
fechar();
}
}
public Ci[] buscar(int numero) {
conectar();
ResultSet rs;
try {
String sql = "SELECT * FROM ci WHERE numero = ? ";
PreparedStatement p = con.prepareStatement(sql);
p.setInt(1, numero);
rs = p.executeQuery();
ArrayList<Ci> resultados = new ArrayList<Ci>();
while (rs.next()) {
Ci temp = new Ci();
temp.setNumero(rs.getInt("numero"));
resultados.add(temp);
}
return (Ci[])resultados.toArray(new Ci[0]);
} catch (SQLException e) {
imprimeErro("Erro ao buscar Ci", e.getMessage());
return null;
}finally {
fechar();
}
}
public void insere(Ci ci){
conectar();
DaoCi daoCi = new DaoCi();
if( daoCi.buscar(ci.getNumero()).length==0 ){
try {
comando.executeUpdate("INSERT INTO ci(numero) VALUES('"
+ ci.getNumero() + "' )");
/* + pessoa.getIdade() + ",'" + pessoa.getCidade() + "','"
+ pessoa.getEstado() + "' */
System.out.println("Inserida!");
} catch (SQLException e) {
imprimeErro("Erro ao inserir CI", e.getMessage());
} finally {
fechar();
}
}else{
System.out.println("já tem"+daoCi.buscar(ci.getNumero()));
}
}
private void conectar() {
try {
con = Conexao.conexao(URL, NOME, SENHA, Conexao.MYSQL);
comando = con.createStatement();
System.out.println("Conectado!");
} catch (ClassNotFoundException e) {
imprimeErro("Erro ao carregar o driver", e.getMessage());
} catch (SQLException e) {
imprimeErro("Erro ao conectar", e.getMessage());
}
}
private void fechar() {
try {
comando.close();
con.close();
System.out.println("Conexão Fechada");
} catch (SQLException e) {
imprimeErro("Erro ao fechar conexão", e.getMessage());
}
}
private void imprimeErro(String msg, String msgErro) {
JOptionPane.showMessageDialog(null, msg, "Erro crítico", 0);
System.err.println(msg);
System.out.println(msgErro);
System.exit(0);
}
}
package banco;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
public class Conexao{
public static final int MYSQL = 0;
private static final String MySQLDriver = "com.mysql.jdbc.Driver";
public static Connection conexao(String url, String nome, String senha,
int banco) throws ClassNotFoundException, SQLException {
switch (banco) {
case MYSQL:
Class.forName(MySQLDriver);
break;
}
return DriverManager.getConnection(url, nome, senha);
}
}

Mas estude bem elas e pergunte a sí mesmo o que deve estar nos andares de Apresentação, Domínio e Recursos?