Neste artigo, vou falar sobre o quinto e último princípio do SOLID: o Princípio da Inversão de dependência (Dependency Inversion Principle), ou simplesmente DIP.
De acordo com Robert C. Martin, o Princípio de Inversão de Dependência consiste em duas partes:
- Módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstrações.
- As abstrações não devem depender de detalhes. Os detalhes devem depender de abstrações.
Vamos entender melhor com alguns exemplos:
Exemplo de violação
Observe a função isWeekDay
, a única responsabilidade dela é retornar true
ou false
dependendo do dia da semana, observe também que existe uma dependência da função getDay
do módulo date-fns
.
import { getDay } from "date-fns";
function isWeekDay() {
const SUNDAY = 0, SATURDAY = 6;
const dayOfWeek = getDay(new Date());
return [SATURDAY, SUNDAY].includes(dayOfWeek)
}
Solução
Neste caso, podemos receber dayOfWeek
como parâmetro.
function isWeekDay(dayOfWeek) {
const SUNDAY = 0, SATURDAY = 6;
return [SATURDAY, SUNDAY].includes(dayOfWeek)
}
Dessa forma, quem controla a forma como dayOfWeek
é calculado é quem vai usar a função isWeekDay
.
Conclusão
Aplicando este princípio deixamos de criar a dependência internamente, passando essa responsabilidade para quem vai utilizar a função. Essa pequena mudança facilita os testes e torna o código mais flexível.
Espero que tenham gostado, se tiverem duvidas ou sugestões podem comentar. Abraço!