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

Conceito Aberto - Fechado

Olá, Rodrigo. tudo bem?

Na Aula 3, Atividade 2, o código foi refatorado para garantira novas validações de reajuste. E com a criação do construtor recebendo as validações, e assim quem precisa saber qual validação dever ser realizada é quem chama o ReajusteService. Isso não abre "brecha" para essa chama ser incompleta? Quem deveria saber quais validações realizar não deveria ser o próprio serviço?

Abraço,

4 respostas

Isso adiciona uma responsabilidade que não é da tua classe. Cada classe deve ter uma responsabilidade única. As validações devem ser feitas em uma classe responsável apenas por validações.

Sobre o conceito de Aberto/Fechado, é bom lembrar, diz que "entidades de software (classes, módulos, funções) devem ser abertas para extensão, porém fechadas para modificação" (tirei isso do livro Padrões de Projeto do GoF). Dessa forma é possível adicionar novos comportamentos para o sistema sem alterar a nossa lógica.

Fala, Thomas. tudo bem?

mas se eu tiver um chamador que colocar um

new ArrayList<>(), no construtor dessa classe, não faremos o reajuste da maneira correta.

a validação não irá lancar nenhuma exceção e o reajuste será feito, pois quem decide se vai ter ou não validação, náo é mais a classe de reajuste, e sim, as classes que começarão a instanciá-la.

solução!

Oi Thiago,

Quem chamar a classe ReajusteService será responsável por saber quantas e quais validações devem ser passadas para a service. No caso de passar uma lista vazia, quem vai ter falhado será a classe que chamou a service passando essa lista vazia.

Mas na prática, em um projeto real, isso não aconteceria pois estaríamos utilizando algum framework de injeção de dependências, como o Spring, e ele que seria o "encarregado" de encontrar e injetar essa lista de validações no construtor da service.

Bons estudos!

ahhhh, anotar @autowired nas classes de validação, faz sendo....

pq imagina que esse serviço fosse chamado por uma controller, dai a controller deveria saber as validações? me parece estranho...

mas com autowired na classe me parece uma boa idea. Boa

Obrigado. Abraços