Dica de boas práticas

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?

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.

[quote=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?
[/quote]

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

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();

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.

[quote=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.

[/quote]

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

[]´s

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

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

[]´s

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

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.