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

A classe que chama a reajusteService

Fiquei na dúvida sobre a class que chama essa reajuste, como ficaria a adição das validações nela? Nesse caso ela não perde a extensibilidade? A reajusteService ficou ok, mas sempre que formos criar uma nova validação precisaremos construí-la na classe que chama a ReajusteService? É isso? Gostaria de ver como ficou essa classe.

3 respostas
solução!

Oi Alan,

Como no curso eu não utilizei nenhum framework, a utilização seria criando uma lista manualmente:

List<ValidacaoReajuste> validacoes = List.of(
    new ValidacaoPeriodicidadeEntreReajustes(), 
    new ValidacaoPercentualReajuste(),
    //outros validadores aqui...);

ReajusteService service = new ReajusteService(validacoes);

Mas é bem provável em uma aplicação que você utilize algum framework que suporte injeção de dependências, como o Spring, e nesse caso a lista com os validadores seria criada automaticamente pelo framework. Algo como:

@Service
public class ReajusteService {

    @Autowired
    private List<ValidacaoReajuste> validacoes;

    //metodos...

}

Desse jeito o Spring vai buscar todas as classes que implementam a interface ValidacaoReajuste e criar uma lista com elas para injetar no atributo da service. Assim fica flexível e não precisa mexer na classe service quando novos validadores forem criados ou removidos.

Bons estudos!

Muito bom, obrigado Rodrigo! Eu fiquei pensando, as validações são objetos de construção simples, fiquei curioso pra saber se existe algum padrão neste caso da inversão de dependências agora com objetos com o processo de construção complexo.

Vai depender de como seria a complexidade, mas no geral você pode usar o padrão Factory Method para isolar a criação do objeto, e no caso de utilizar o Spring pode ser possível realizar a injeção de dependências mesmo assim.

Bons estudos!