1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Optmização de código

Bom dia Pessoal! Pra variar mais um novato. Bom programo em COBOL, comecei a me aventurar pelo java e estou tentando montar minhas primeiras rotinas. Ja crei conexões com banco, o CRUD basico e tals. Bom estou perdido um pouco no Encapsulamento, como é a primeira vez não sei se estou indo para o caminho certo. Funcionar funciona, mas é correto? abaixo mostro um metodo de seleção que montei tentando deixa-lo um pouco dinamico. Para tal fim criei uma classe estrutura, que contem como atributos nameCampo, condicaoCampo e valueCampo. Entao crei outra classe que adiciona estas estruturas aos array FILTROS, SELECAO E ORDEM. e depois os vincula ao HashMap. Nesta classe de seleção eu pego os array do HashMap e monto o Select. Na minha classe de tela uso algo do tipo:

SFO sfo = new SFO();
sfo.clear();
sfo.addFiltros("UF_NOM", " LIKE ", "%" + jTFnomeEstado.getText() + "%");
LoadTable();

Podendo assim adicionar qualquer filtro, qualquer ordem ou qualquer seleção. Minha pergunta isso esta correto que melhorias posso implementar? Outra duvida seria melhor utilizar framework ao invez de fazer na mão? hibernate? Fazendo a mão consigo criar meu banco via linha de programação, usando hibernate tambem é possivel? Abaixo a minha Classe SFO que adiciona filtros, seleções e ordem. E tambem o mapeamento dos parametros!

public class SFO {
    private ArrayList arrayListFiltros = new ArrayList();  
    private ArrayList arrayListSelecao = new ArrayList();      
    private ArrayList arrayListOrdem   = new ArrayList(); 
    private EstruturaCampos estrutura  = new EstruturaCampos();
    private MapearParametros parametros = new MapearParametros();    

    public void addFiltros(String filtros, String condicao, Object value){
       estrutura.setNameCampo(filtros);
       estrutura.setCondicaoCampo(condicao);
       estrutura.setValueCampo(value);
       arrayListFiltros.add(estrutura);
    }

    public void clearFiltros(){
       arrayListFiltros.clear();
    }    

    public void addSelecao(String filtros, Object value){
       estrutura.setNameCampo(filtros);
       estrutura.setValueCampo(value);
       arrayListSelecao.add(estrutura);
    }

    public void clearSelecao(){
       arrayListSelecao.clear();
    }        

    public void addOrdem(String filtros, Object value){
       estrutura.setNameCampo(filtros);
       estrutura.setValueCampo(value);
       arrayListOrdem.add(estrutura);
    }

    public void clearOrdem(){
       arrayListOrdem.clear();
    }            

    public void clear(){
       clearFiltros();
       clearSelecao();
       clearOrdem();
    }      

    public MapearParametros addParFiltros(){
        parametros.ClearParametros();
        if (arrayListFiltros.isEmpty()) {
            parametros.AddParametros("Filtros", null);
        } else {
            parametros.AddParametros("Filtros", arrayListFiltros);
        }
        if (arrayListSelecao.isEmpty()) {
            parametros.AddParametros("Selecao", null);
        } else {
            parametros.AddParametros("Selecao", arrayListSelecao);
        }        
        if (arrayListOrdem.isEmpty()) {
            parametros.AddParametros("Ordem", null);
        } else {
            parametros.AddParametros("Ordem", arrayListSelecao);
        }                
        return parametros;
    }

}

Abaixo o metodo de seleção que esta na minha classe estadosDAO:

    public List<Estados> SelecionarEstados() throws Exception {
        List<Estados> lista = new ArrayList<Estados>();
        List<EstruturaCampos> filtros = new ArrayList<EstruturaCampos>();
        List<EstruturaCampos> selecao = new ArrayList<EstruturaCampos>();
        List<String> selecaoExiste = new ArrayList<String>();
        List<EstruturaCampos> ordem = new ArrayList<EstruturaCampos>();
        EstruturaCampos estrutura = new EstruturaCampos();
        filtros = parametros.getFiltros();
        selecao = parametros.getSelecao();
        ordem = parametros.getOrdem();
        StringBuffer sql = new StringBuffer("select");

        if (selecao != null && !selecao.isEmpty()) {
            for (int i = 0; i < selecao.size(); i++) {
                estrutura = selecao.get(i);
                sql.append(estrutura.getNameCampo());
                selecaoExiste.add(estrutura.getNameCampo());
                sql.append(" ");
            }
        } else {
            sql.append(" * ");
        }
        sql.append("from tbestados ");
        if (filtros != null && !filtros.isEmpty()) {
            sql.append(" where ");
            for (int i = 0; i < filtros.size(); i++) {
                estrutura = filtros.get(i);
                sql.append(estrutura.getNameCampo());
                sql.append(" ");
                sql.append(estrutura.getCondicaoCampo());
                sql.append(" ");
                sql.append("?");
                sql.append(" ");
            }
        }
        if (ordem != null && !ordem.isEmpty()) {
            sql.append(" order by ");
            for (int i = 0; i < ordem.size(); i++) {
                estrutura = ordem.get(i);
                sql.append(estrutura.getNameCampo());
                sql.append(" ");
            }
        }
        PreparedStatement e = con.prepareStatement(sql.toString());
        if (filtros != null && !filtros.isEmpty()) {
            for (int i = 0; i < filtros.size(); i++) {
                estrutura = filtros.get(i);
                e.setObject(i + 1, estrutura.getValueCampo());
            }
        }
        ResultSet rs = e.executeQuery();
        while (rs.next()) {
            Estados estado = new Estados();
            if (selecao != null) {
                if (selecaoExiste.contains("UF_SIG")) {
                    estado.setUf_Sig(rs.getString("UF_SIG"));
                }
                if (selecaoExiste.contains("UF_NOM")) {
                    estado.setUf_Sig(rs.getString("UF_NOM"));
                }
            } else {
                estado.setUf_Sig(rs.getString("UF_SIG"));
                estado.setUf_Nom(rs.getString("UF_NOM"));
            }
            lista.add(estado);
        }
        rs.close();
        e.close();
        return lista;
    }

Thiago Costa

  • Seu método está com muitas linhas. Isso pode futuramente comprometer a manutenibilidade do código.

    Roger75   14 de out de 2014
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags otimização java dao ou faça a sua própria pergunta.