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

ENUM E SINGLETON + INSTÂNCIA

Boa noite a todos,

Estou com uma grande dúvida, tenho um projeto o qual irá realizar tarefas diferentes dependendo do "PROVIDER" o qual for retornado pelo ENUM abaixo:

public enum ProviderService {

    Brasil("V", new ViatorProductService()),
    America("M", new AmericaProductService());

    private static final ProviderService[] copyOfValues = values();
    @Getter private String prefix;
    @Getter private ProductServiceImpl productService;

    private ProviderService(String prefix, ProductServiceImpl productService) {
        this.prefix = prefix;
        this.productService = productService;
    }

    public static ProviderService forPrefix(String prefix) {
        for (ProviderService value : copyOfValues) {
            if (value.prefix.equals(prefix)) {
                return value;
            }
        }
        return null;
    }    
}
@Service
public class BrasilProductService implements ProductServiceImpl {

    public List<ProductDateAvailability> getProductDateAvailability(AvailableDateFilter filter) {
         omitido...
        return null;
    }

}
public interface ProductServiceImpl {
    List<ProductDateAvailability> getProductDateAvailability(AvailableDateFilter filter);
}

Minha dúvida é, já que meu sistema não mantém sessão, e o ENUM apenas cria 1 instância de suas CONSTANTES, estará errado a forma que faço acima ? pois estou tentando aplicar uma abstração, já que com base no Provider, terei suas respectivas classes de SERVIÇO, o qual irei usar métodos similares, só com a modificação de cada provider.

Teria algum problema em realizar a tarefa da forma acima? ou pelo fato da instância ser SINGLETON, teria algum problema?

2 respostas
solução!

Oi Frank, tudo bem?

Como você vai fazer para passar o ProviderService ao ProductService? Se você quiser usar o contexto do spring para controlar as dependência do projeto, ao fazer a instanciação pelo new conforme abaixo, você pode ter problemas:

Brasil("V", new ViatorProductService()),
America("M", new AmericaProductService());

Supondo que o AmericaProductService tenha outras dependências, elas também teriam que ser criadas com new, o que não seria interessante uma vez que a injeção de dependências do Spring resolve isso pra você.

Obrigado pela resposta, entendi, qual seria a melhor abordagem para esse exemplo, utilizando o contexto do Spring e abstrações? estou querendo evitar múltiplos ifs.