Recentemente no meu trabalho encontrei uma situação onde eu recebia 5 lista diferentes vindas de um resultado de banco de dados e aonde eu tinha que percorrer ambas e fazendo validações para montar uma unica lista para então passar para o metodo de insert na base de dados. por diversas vezes me questionei qual padrão de projetos se encaixaria melhor para retirar aqueles for e if em sequencia e ainda persiste essa duvida.
exemplo aleatorio abaixo :
public List<Ordem> checkElegiveis (listCnpj, listCredenciadoras, listaPagamentos, listPedidos) {
for(Pedidos o : lispedidos){
if(o.getNumeroPedido != null && o.getNumeroPedido > 5) {
for ( Document d : listcnpj ) {
if ( d.getCnpj.legth() >= 11 ) {
// continua lendo as listas e no final adiciona na lista
}
}
minha solução foi, criar uma classe que ficasse responsável por ter apenas metodos de checagem de regras. os if eu fiz os if virarem metodos por exemplo
public boolean checkNumberOrdem ( Pedidos o ) {
return o.getNumeroPedido != null && o.getNumeroPedido > 5) {
}
O código está errado mas e apenas para exemplo, mas tentei desacoplar o maximo possível separando em metodos e por serem tipos de lista diferentes eu nao vi a possibilidade e colocar o strategy, observe por exemplo. Talvez um chain of responbility mas como a cada if eu precisaria de um resultado para seguir adiante e no final adicionar a lista eu nao encontrei uma forma em que o polimorfismo pudesse me ajudar neste caso.