Se chegou até aqui, significa que você já entende, ou está começando a entender, a importância de escrever um bom código. Parabéns! isso é maturidade.
Você está no caminho certo! | |||||||||||||||
Se chegou até aqui significa que você já entende, ou está começando a entender, a importância de escrever um bom código. Parabéns! isso é maturidade. | |||||||||||||||
Sem mais enrolação, SHOW ME THE CODE. | |||||||||||||||
O que é injeção de dependência? | |||||||||||||||
Definição: | |||||||||||||||
É uma técnica para obter inversão de controle (IOC) entre classes e suas dependências. | |||||||||||||||
Na prática: | |||||||||||||||
Injeção de dependência é um design pattern utilizado para remover a dependência entre um objeto e outro. | |||||||||||||||
Ou seja, quando instanciamos um objeto em outro objeto, para utilizar os métodos e função dos quais necessitamos, criamos uma dependência — diminuindo a coesão, aumentando o acoplamento — que pode complicar a atualização do sistema futuramente. | |||||||||||||||
Exemplo de um código dependente: | |||||||||||||||
| |||||||||||||||
Exemplo do mesmo código, mas sem dependência. | |||||||||||||||
| |||||||||||||||
| |||||||||||||||
Dessa forma, eliminamos a dependência que a classe Liga() possuía ao instanciar a classe Telefone(), como no primeiro exemplo. | |||||||||||||||
Mas o que mudou? | |||||||||||||||
Como podemos reparar no segundo exemplo, criamos uma interface ITelefone, que define um contrato public string Numero(); e a única coisa que nossa classe Liga() precisa se preocupar, é em saber da existência contrato. | |||||||||||||||
Dessa forma, a classe Liga() pode utilizar qualquer outra classe que implemente a interface ITelefone. | |||||||||||||||
Nesse exemplo, utilizamos o principio de inversão de controle (IoC), já que a classe Liga() não é mais responsável por instanciar a classe Telefone(), deixando a responsabilidade de definir a classe concreta para um agente externo, como veremos a seguir: | |||||||||||||||
| |||||||||||||||
Sem dependências | |||||||||||||||
O tipo de abordagem que utilizamos ganha o nome de injeção de construtor, pois, como diz o nome, a injeção da interface é feita no construtor da classe. | |||||||||||||||
Há, além dessa, outras abordagens para a injeção de dependência, sendo elas: | |||||||||||||||
| |||||||||||||||
Cada uma possui sua própria forma de implementação, e encorajo fortemente que você pesquise mais afundo sobre DI e IoC. | |||||||||||||||
Há também como utilizarmos um container de injeção de dependência, caso estejamos lidando com muitas interfaces e diversas instancias compartilhadas, o que auxiliaria no gerenciamento delas. Mas este assunto ficará para um próximo tópico. | |||||||||||||||
Forte abraço e obrigado por acompanhar meu conteúdo! |