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
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:[code]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);
}[/code]Com isso podemos ter uma Factory que recebe a linha, descobre qual o tipo pelo primeiro caractere, e instancia o tipo de Insert correto:[code]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);
}
}[/code]E um main de exemplo:[code]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);
}
}[/code]Nessa situação, se existir um caso novo de insert, é só adicionar um novo elemento ao enum.
[quote=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[/quote]
If bom é if morto:
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.