[Resolvido] E aí polimorfismo?

3 respostas
P

Salve pessoal!

A minha dúvida é basicamente a seguinte:

  • Tenho um arquivo de texto, onde cada linha representa um registro.
  • Cada tipo de registro é diferenciado através do primeiro caractere (ex: ‘a’ identifica cliente, ‘b’ identifica produto, etc…);
  • Para cada registro lido é gerada uma query de inserção no banco de dados (de acordo com o seu tipo);

O que me incomoda nesta situação é que a identificação do tipo de registro (e posterior encaminhamento para a respectiva classe que irá ‘quebrar’ os campos e montar a query) é feita por uma cláusula if-else if que me dá nos nervos sempre que leio.

A pergunta é… existe uma maneira mais elegante de escrever este código?

Grande abraço a todos

3 Respostas

Rodrigo_Sasaki

Eu tenho uma sugestão, você pode tentar usar Enums pra gerar as suas queries. Nesse código eu usei seus exemplos, deduzindo que existem 2 tipos de query: "a" e "b".

Peço desculpas se os nomes das classes não fazem muito sentido, nunca fui bom nisso :)

Primeiramente nós temos um enum, e nele vai ficar a lógica de como se monta a query de cada tipo:
public enum Insert {

    a{
        public String gerarInsert(String text) {
            return "Gerar Insert do tipo A";
        }
    },

    b{
        public String gerarInsert(String text) {
            return "Gerar Insert do tipo B";
        }
    };

    public abstract String gerarInsert(String text);

}
Com isso podemos ter uma Factory que recebe a linha, descobre qual o tipo pelo primeiro caractere, e instancia o tipo de Insert correto:
public class InsertFactory {

    public static String gerarInsert(String line){
        //Extrai o tipo do insert
        String tipo = extrairTipo(line);

        //Instancia o objeto que irá construir o insert statement
        Insert insert = Insert.valueOf(tipo);

        //Retorna a String
        return insert.gerarInsert(line);
    }

    private static String extrairTipo(String line){
        return line.substring(0, 1);
    }

}
E um main de exemplo:
public class Main {

    public static void main(String[] args) {
        String a = "a-information";
        String b = "b-information";

        String aStatement = InsertFactory.gerarInsert(a);
        String bStatement = InsertFactory.gerarInsert(b);

        System.out.println(aStatement);
        System.out.println(bStatement);
    }

}
Nessa situação, se existir um caso novo de insert, é só adicionar um novo elemento ao enum.
Luiz_Augusto_Prado

PAmaranto:
Salve pessoal!

A minha dúvida é basicamente a seguinte:

  • Tenho um arquivo de texto, onde cada linha representa um registro.
  • Cada tipo de registro é diferenciado através do primeiro caractere (ex: ‘a’ identifica cliente, ‘b’ identifica produto, etc…);
  • Para cada registro lido é gerada uma query de inserção no banco de dados (de acordo com o seu tipo);

O que me incomoda nesta situação é que a identificação do tipo de registro (e posterior encaminhamento para a respectiva classe que irá ‘quebrar’ os campos e montar a query) é feita por uma cláusula if-else if que me dá nos nervos sempre que leio.

A pergunta é… existe uma maneira mais elegante de escrever este código?

Grande abraço a todos

If bom é if morto:

P

Rodrigo!

Muito… mas muito legal mesmo a tua abordagem ao meu problema Rodrigo. Nem havia me passado pela cabeça o uso de enum para resolver esta questão.

Finalmente poderei fazer sumir da minha frente aquele arranha-céu de “if” que tanto me incomodava.

Grande abraço.

Criado 7 de janeiro de 2015
Ultima resposta 7 de jan. de 2015
Respostas 3
Participantes 3