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

[Dúvida] Dependency Inversion Principle vs Strategy

No curso de Solid temos uma classe chamada ReajusteService que reajusta o salário de um Funcionario funcionario.

Essa classe, recebe via construtor uma lista de ValidacaoReajuste, que é uma interface. Essa interface tem o método valida

Daí temos diferentes validações que implementam ValidacaoReajuste e usam o valida de formas diferentes.

E no ReajusteService ele recebe uma abstração, ou seja, ele não recebe diretamente uma classe que calcula imposto, mas sim uma interface. Fazendo com que possamos passar uma lista de diferentes classes que implementam essa interface.

Agora vendo sobre strategy, eu achei o conceito BEM parecido, pois criamos uma interface Imposto, usamos em diferentes classes que calculam imposto e a CalculadoraDeImpostos tem um metodo que recebe um parametro do tipo da interface (Imposto).

Interpretei errado ou existe alguma diferença entre ambos?

2 respostas
solução!

Oi Naldson!

Bem observado! O pattern strategy é meu favorito, pois quando o implementamos, via utilização de interfaces, conseguimos aplicar 3 princípios SOLID ao mesmo tempo:

  • Single Responsibility -> Cada estratégia é implementada numa classe separada, que possui uma única responsabilidade
  • Open-closed -> A classe que usa a abastração do strategy (no exemplo do curso foi a classe ReajusteService) está fechada para modificações, mas aberta para extensão (podemos criar/alterar/remover classes que implementam a interface, sem precisar mexer na classe ReajusteService)
  • Dependency Inversion -> A classe que utiliza o strategy não depende diretamente de nenhuma estratégia (classe concreta), mas sim de uma abstração

Bons estudos!

O famoso "SOD" rs

Obrigado pela explicação, Rodrigo