Dica de boas práticas

9 respostas
M

Pessoal,

Estou com uma dúvida. No código:

if (ServiceTypeEnum.consultar.equals(msgRequisicao.getServico())) {
            return new ServiceConsultar(msgRequisicao);
        } else if (ServiceTypeEnum.autenticar.equals(msgRequisicao.getServico())) {
            return new ServiceAutenticar(msgRequisicao);
        }

Gostaria de saber se passando por parâmetro " msgRequisicao.getServico()" é caracterizado uma má pratica ou se não seria melhor declarar uma variável recebendo o valor de retorno da função?

9 Respostas

rmendes08

Nesse caso eu usaria uma variável, acho que fica mais claro além de você poder atribuir um nome que seja mais significativo dentro do contexto em que você está trabalhando. Além do mais, me parece que o tipo de retorno é uma enumeração. Se for o caso, eu sugeriria ainda o uso de swith-case.

Alexandre_Saudate

malbarbosa:
Pessoal,

Estou com uma dúvida. No código:

if (ServiceTypeEnum.consultar.equals(msgRequisicao.getServico())) {
            return new ServiceConsultar(msgRequisicao);
        } else if (ServiceTypeEnum.autenticar.equals(msgRequisicao.getServico())) {
            return new ServiceAutenticar(msgRequisicao);
        }

Gostaria de saber se passando por parâmetro " msgRequisicao.getServico()" é caracterizado uma má pratica ou se não seria melhor declarar uma variável recebendo o valor de retorno da função?

Se você puder, refatore para ficar mais ou menos assim:

return ServiceTypeEnum.valueOf(msgRequisicao.getServico()).getServiceInstance(msgRequisicao);

Note que ServiceConsultar e ServiceAutenticar teriam que implementar uma interface comum ou extender uma mesma classe, mas acho que o método fica mais elegante, concorda?

[]´s

Abdon

Prq vc não cria no seu enum um método que já retorna a instancia certinha que vc quer?
Ai não teria nem if e nem switch, ficaria algo parecido como:

IServico service = msgRequisicao.getServico().getInstance();
M

Boa tarde Ovelha,
acredito que para minha aplicação esse método que você me sugeriu não irá funcionar, pois o atributo msgRequisicao é uma classe serializada, que recebe informações de um arquivo XML.

Alexandre_Saudate

malbarbosa:
Boa tarde Ovelha,
acredito que para minha aplicação esse método que você me sugeriu não irá funcionar, pois o atributo msgRequisicao é uma classe serializada, que recebe informações de um arquivo XML.

Nesse caso, você poderia usar o esquema que te passei, certo?

[]´s

M

Correto, mas para o seu caso eu teria que ter um método getServiceInstance() na classe ServiceTypeEnum, correto?

Alexandre_Saudate

Sim, é a idéia… o ServiceTypeEnum sabe de qual Service ele está falando.

[]´s

Abdon

Eu pensei que o método msgRequisicao.getServico() retornava um enum, até prq vc esta usando ele para comparar com um enum.

renzonuccitelli

Eu fiz isso em framework atender requisições Flex no Java. Procedi como o amigo falou, criando uma interface para a lógica de negócio e carregando as várias instancias em um mapa. Assim os meu if sumiram e a solução ficou mais elegante e fácil de criar novas lógicas de negócio. Assim que eu terminar a documentação posto por aqui.

Criado 5 de novembro de 2010
Ultima resposta 5 de nov. de 2010
Respostas 9
Participantes 5