[quote=leonhard32][quote=Nicolas Fernandes]
Leon, não funciona desse modo se ele está fazendo injeção de dependências. Quando acontece essa situação, você passa os objetos necessários via construtor da classe.
Para que fique de acordo com o que ele quer, deve-se passar a conexão pelo construtor da classe DAO.
[/quote]
Sim, mas esta forma de implementação não há beneficios, levando em conta que cada nova chamada do método, ele precisará passar novamente uma Connection…
[/quote]
Vejo claramente o padrão de injeção de dependências. E se o cara quiser usar somente uma conexão para realizar várias operações de uma vez só em várias entidades do banco de dados? Vai abrir e fechar conexão toda hora que for requisitar dados do DB?
E se ele quiser manter uma conexão aberta somente na Sessão para o usuário e repassá-la quando precisar realizar qualquer operação de consulta no DB? Não é muito mais válido? Onde você não vê benefícios aqui?
Sou muito mais adepto da Injeção de Dependências em uma situação do tipo:
[code]public class Main {
public static void main(String[] args) {
// Tudo isso usando uma única conexão para este usuário
// a fim de não sobrecarregar o número de conexões no DB.
Connection minhaConexao = ServicosConnection.getConnection();
ClasseDeServicos1 servicos1 = new ClasseDeServicos1(minhaConexao);
ClasseDeServicos2 servicos2 = new ClasseDeServicos2(minhaConexao);
ClasseDeServicos3 servicos3 = new ClasseDeServicos3(minhaConexao);
ClasseDeServicos4 servicos4 = new ClasseDeServicos4(minhaConexao);
servicos1.atualizaAlgumaCoisa();
servicos2.consultaEmUmaTabela();
servicos3.insereDadosEmUmaNovaTabela();
servicos4.atualizaMaisAlgumaCoisa();
ServicosConnection.concluirOperacoes(minhaConexao);
}
}[/code]e…[code]public class ClasseDeServicos1 {
private Connection conexaoQueReceboPeloConstrutor;
public ClasseDeServicos1(Connection conexaoQueReceboPeloConstrutor) {
this.conexaoQueReceboPeloConstrutor = conexaoQueReceboPeloConstrutor;
}
public void atualizaAlgumaCoisa() {
//Faz alguma operação usando a conexão que foi repassada à instância da classe.
}
}
[/code]
Do que, a cada vez que eu criar uma instância da classe ou requisitar uma operação no DB, seja necessária uma nova conexão, como por exemplo:
public class Main {
public static void main(String[] args) {
ClasseDeServicos1 servicos1 = new ClasseDeServicos1();
ClasseDeServicos2 servicos2 = new ClasseDeServicos2();
ClasseDeServicos3 servicos3 = new ClasseDeServicos3();
ClasseDeServicos4 servicos4 = new ClasseDeServicos4();
servicos1.atualizaAlgumaCoisa();
servicos2.consultaEmUmaTabela();
servicos3.insereDadosEmUmaNovaTabela();
servicos4.atualizaMaisAlgumaCoisa();
}
}[/code]e...[code]public class ClasseDeServicos1 {
public ClasseDeServicos1() { }
public void atualizaAlgumaCoisa() {
// busca uma nova conexão.
Connection minhaConexao = ServicosConnection.getConnection();
// atualiza alguma coisa...
}
}
public class ClasseDeServicos2 {
public ClasseDeServicos2() { }
public void consultaEmUmaTabela() {
// busca outra nova conexão. Se não der commit na conexão no método de cima,
// perde o que tinha feito nele.
Connection minhaConexao = ServicosConnection.getConnection();
// consulta em uma tabela...
}
}
[quote=leonhard32]Além das suas dicas, do nome de classe, eu sugiro que o CaioNascimento não utilize a chamada de suas classes DAO dessa forma, mas sim que divida melhor as camadas do sistema…
Faça as chamadas de métodos diretamente na classe MODELO, a classe modelo terá relação com os métodos da classe DAO…
Qualquer dúvida eu posso postar um exemplo…
Abs[/quote]
Exato, o Leon tem razão, Caio. Defina uma arquitetura para o seu sistema e aplique-a nesse contexto. Para começar, porque não definir uma arquitetura MVC e trabalhá-la aí? O que eu fiz foi um exemplo baseado no que você tinha feito para entender como resolver seu problema, mas também sou adepto ao uso de uma arquitetura aí!
Abraços, fiquem com Deus!