Olá amigos, é uma dúvida bem simples, acredito, digamos que de iniciante, costumo passar objetos como argumento, um ex simples:
Tenho uma JTable, ao dar um select no bd passo a tabela como argumento para ser preenchida pelo resulset.
É uma má pratica?
Má pratica de programação? [ RESOLVIDO ]
6 Respostas
???
Você está falando que passar uma referência como parametro de um método e fazer operações que altere o valore do objeto dentro do método?
Tipo:
public void mudarReferencia(Objeto referencia){
referencia.setValores("tou modificando o objeto");
}
Não… mas você tem ter sabedoria em fazer… pois para debugar e descobrir quais são pois pontos onde o Objeto referencia foi alterado fica um pouco mais trabalhoso.
???Você está falando que passar uma referência como parametro de um método e fazer operações que altere o valore do objeto dentro do método?
Tipo:
public void mudarReferencia(Objeto referencia){ referencia.setValores("tou modificando o objeto"); }Não… mas você tem ter sabedoria em fazer… pois para debugar e descobrir quais são pois pontos onde o Objeto referencia foi alterado fica um pouco mais trabalhoso.
É isso mesmo que estou falando, me desculpe, na verdade é a referencia e não objeto.
Obrigado pela atenção.
Deixa eu ver se eu entendi. Voce esta construindo um metodo assim?
public void fazerSelect(JTable table) {
// Faz conexao com banco de dados
// Obtem um ResultSet com os resultados da consulta
// Itera pelo ResultSet e popula o JTable passado como parametro
}
Se for isso, nao acho uma boa ideia porque voce esta fazendo com que a classe que se comunica com o banco de dados fique acoplada a biblioteca de interface com o usuario (no caso Swing). Ela nao devia ser responsavel por fazer coisas de interface grafica, e tambem nao e bom fazer o metodo retornar o ResultSet para que o form Swing o utilize: nesse caso teremos o problema inverso. Faca seu metodo popular um List e retorna-lo.
Alem disso, procure construir seus metodos de maneira que eles nao tenham side effects. Alterar o estado do objeto armazenado em um parametro geralmente nao e bom. Se for o caso, crie uma copia do objeto que o metodo recebe, altere o estado dessa copia e retorne-a.
É isso mesmo caro amigo tnaires, veja, eu sempre faço assim.
public void pesquisar(javax.swing.table.DefaultTableModel table){
try {
ResultSet rs= statement.executeQuery("select *from NAME ");
while(rs.next()){
table.addRow(new String[]{
rs.getString("nomes")
});
}
} catch (SQLException ex) {
Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex);
}
}
então… isso aumenta acoplamento, você tem um objeto de uma camada (view) sendo usada em outra (model), que nem tem a ligação direta, teria o controller entre as duas…bom…bom não é, mas eu ja vi tanta, eu recomendo justamente que você evite, acho meio difícil você precisar disso… mas ja vi tanta coisa tão pior… por não atrapalhar a legibilidade do código eu nem considero uma gambiarra monstra, apenas um código mau arquitetado.
Obrigado pelas respostas, ajudou bastante.