Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Quais padrões utlizar

Boa tarde galera, Estou com a seguinte dúvida de quais e como utilizar os padrões de projetos pra seguinte situação:

A partir de 3 flags preciso tomar decisões diferentes. Ex com IFs:

if (fgVenda == 1 || fgVenda == 2) return "VENDA"; if (fgVenda == 3) return "NAO VENDA"; if (fgVenda == 4 || fgVenda == 5) return "ESTADO DE ANALISE";

Para os casos de "ESTADO DE ANALISE" tenho que validar mais 2 flags (fgAbertura e fgConsulta). Segue:

if (fgAbertura == 1 e fgConsulta == 0) return "Aberuta SEM consulta" else if (fgAbertura == 1 e fgConsulta == 1) return "Aberuta COM consulta" if (fgAbertura == 0 e fgConsulta == 1) return "Apenas consulta" else return "";

Podem dar dicas? Obrigado.

9 respostas

Padrão State, sem dúvidas

Oi Thiago

A sua dúvida foi solucionada?

Em partes, como utilizar os padrões em cima de IFs aninhados.

Thiago, tenta usar o padrão Strategy. Crie um método boolean valida em uma interface, e nas classes concretas você coloca a lógica que pôs nos ifs. e quando vc analisa (fgVenda == 4 || fgVenda == 5) return "ESTADO DE ANALISE"; ao invés de retornar "ESTADO DE ANALISE" chame um método que possa retornar a string "Aberuta COM/SEM consulta". e no ultimo return, é melhor colocar null ao invés de " "

criar uma Strategy para cada if seria ideal, também é possível que para ifs com muitas condicionais utilizar templates

Strategy me parece o mais adequado.

Elimina esse monte de ifs.

solução!

Concordo com o João, strategy parece mais adequado, se vc abstrair essas flags em uma interface e colocar uma clase para cada casos do seu if vc pode executar os códigos que vão no bloco if no método definido na sua interface.

Quando eu me deparo com uma situação como esta eu coloco uma enum, no seu caso fgVenda dependendo da interface e onde eu faria os ifs aninhados eu chamo o objedo.fgVenda.executaAcao();

Espero ter ajudado.

Abs,

Muito obrigado galera. Consegui fazer utilizando o padrão Strategy e utilizando enums.