Inversão e Injeçao de Dependência
Provavelmente você está pesquisando como fazer uma inversão e injeção de dependência e caiu aqui, irei te ensinar a como fazer de uma forma descomplicada, a ideia e o conceito de inversão e injeção de dependência é simples.
Primeiro precisamos entender o que é uma dependência, você imagina que seja algo externo como um pacote de terceiro que você instala no seu projeto, e podemos afirmar que sim, é exatamente isso. Um pacote como o Axios ou como até mesmo um pacote que envia e-mails, pacotes que agendam tarefas, tudo isso é dependência, tudo aquilo que seu projeto precisa para funcionar pode ser considerado uma dependência.
Agora que já sabemos o que é uma dependência, vamos entender esse tal de inversão de dependência. Imagine que você instalou o Axios no seu projeto backend para se comunicar com outra api, e ao usar o axios no seu projeto você não usou inversão de dependência, o Axios está sendo usado em vários lugares do seu projeto sem padrão.
Então você conhece um outro pacote que faz a mesma coisa que o axios, só que melhor e mais rápido, e você queria usar em seu projeto, e agora como faz?! Você terá que mudar todos os arquivos que tem o Axios e ajustar para que as coisas continuem funcionando.
É aí que a inversão de dependência entra para resolver esse problema, ao invés de depender de um pacote de terceiro, não seria mais interessante depender de algo que você mesmo criou?! Não estou falando de você criar mais um pacote no npm, e sim de uma interface, como essa:
Repare no código acima. Não fiz nenhuma implementação concreta, escrevi apenas uma interface que me diz que tenho um HttpRequest e nele tenho dois métodos get e post, e é possível passar o input e o output também.
Agora vamos para a implementação concreta do axios que vou chamar de http apenas, leia o código abaixo:
Agora já temos uma inversão de dependência para usamos, repare que no construtor estou usando uma configuração do axios chamada validateStatus ela serve para o axios não lançar exceções, assim não precisamos ficar usando try catch em tudo.
Agora que entendemos o que é inversão de dependência, vamos entender o que é uma injeção de dependência.
Calma, fica tranquilo que é rápido e não doi nada, e vai te poupar muita dor de cabeça no futuro meu colega.
Repare que no meu construtor eu faço a injeção de uma dependência chamada httpRequest que é uma interface, ou seja meu caso de uso nem faz ideia do que o http faz por baixo dos panos, é como pensar que é uma caixa preta, a única coisa que minha classe PokemonUseCase sabe é sobre os métodos que o HttpReqest tem nada mais do que isso.
Criamos um contrato com o Http garantido que tem esses métodos implementados, e nosso caso de uso confia que isso funciona, não importa qual pacote estamos usado para para fazer request para a api de pokemon legal né?
Ainda não ficou claro?! Vou mostrar mais um exemplo de injeção de dependência usado uma função.
Só que agora estou passando o HttpRequest como primeiro parâmetro e o segundo é o nome do pokémon que estamos querendo buscar. E caso a request de um status 200, retornamos os dados, e caso de erro não fazemos nada nesse caso, mas poderíamos retornar o erro um erro por exemplo.
E isso é tudo colegas! Caso tenha ficado com dúvidas, comentem aqui irei responder. Em caso de sugestões estamos aí também.
Se você ainda está estudando sobre o assunto e ainda não ficou claro o que é exatamente recomendo dar uma pausa e tentar ler de novo a parte que não ficou clara, e tente fazer seus próprios códigos. Bons estudos!
Me siga no Linkedin e no Guihub sempre to aprontado alguma coisa por lá.
Esse artigo foi escrito inicialmente no medium e repostrado no Tabnews, caso queria ver no medium segue o link Artigo no Medium