por Bhavya Karia
Introdução
Em engenharia de software, injeção de dependência é uma técnica através da qual um objeto (ou método estático) fornece a dependências de outro objeto. Uma dependência é um objeto que pode ser usado (um serviço).
essa é a definição da Wikipédia, mas ainda assim, mas não é particularmente fácil de entender. Então vamos entender melhor.,antes de entender o que significa na programação, vamos primeiro ver o que significa em geral, pois nos ajudará a entender melhor o conceito.dependência ou dependente significa depender de algo para suporte. Como se eu dissesse que estamos a depender demasiado dos telemóveis do que significa que estamos dependentes deles.
assim, antes de chegar a injeções de dependência, primeiro vamos entender o que uma dependência na programação significa.
Quando a classe A usa alguma funcionalidade da Classe B, então a sua diz que a classe A tem uma dependência da classe B.,
Em Java, antes de podermos usar métodos de outras classes, precisamos primeiro criar o objeto dessa classe (i.e. classe precisa criar uma instância da classe B).
assim, transferir a tarefa de criar o objeto para outra pessoa e usar diretamente a dependência é chamada de injeção de dependência.
porque devo usar a injecção de dependência?,
digamos que temos uma classe de carro que contém vários objetos, tais como rodas, motor, etc.
aqui A classe de carros é responsável pela criação de todos os objetos de dependência. E se decidirmos livrar-nos do MRFWheels no futuro e usarmos as rodas Yokohama?
teremos de recriar o objecto do carro com uma nova dependência de Yokohama. Mas ao usar a injeção de dependência (DI), podemos mudar as rodas no tempo de execução (porque as dependências podem ser injetadas no tempo de execução ao invés de no tempo de compilação).,
Você pode pensar em DI Como o intermediário em nosso código que faz todo o trabalho de criar o objeto de rodas preferido e fornecê-lo para a classe de carro.torna a nossa classe de carros independente da criação de objectos de Rodas, Bateria, etc.
existem basicamente três tipos de injeção de dependência:
- injeção de construtor: as dependências são fornecidas através de um construtor de classe.injecção de
- setter: o cliente expõe um método setter que o injector usa para injectar a dependência.,
- injeção de interface: a dependência fornece um método de injeção que irá injetar a dependência em qualquer cliente passado para ele. Os clientes devem implementar uma interface que expõe um método setter que aceita a dependência.
Então, agora é a injeção de dependência da responsabilidade de:
- Criar a objetos
- Saber quais as classes que requerem esses objetos
- E fornecer-lhes todos os objetos
Se houver qualquer alteração nos objectos e, em seguida, DI olha para ele e ele não deve preocupação da classe com esses objetos., Desta forma, se os objetos mudarem no futuro, então a sua DI é responsável por fornecer os objetos apropriados para a classe.
inversão de controle —o conceito por trás de DI
isto afirma que uma classe não deve configurar suas dependências estaticamente, mas deve ser configurada por alguma outra classe do exterior.
é o quinto princípio da S. O. L. I. D — os cinco princípios básicos da programação orientada a objetos e design pelo Tio Bob — que afirma que uma classe deve depender de abstração, e não sobre concreções (em termos simples, hard-coded).,de acordo com os princípios, uma classe deve se concentrar no cumprimento de suas responsabilidades e não na criação de objetos que ela requer para cumprir essas responsabilidades. E é aí que a injeção de dependência entra em jogo: ela fornece à classe os objetos necessários.
Nota: Se você quiser aprender sobre princípios sólidos pelo tio Bob, então você pode ir para este link.os benefícios do uso de DI
- ajuda no teste de unidade.
- o código da placa da caldeira é reduzido, uma vez que a inicialização das dependências é feita pelo componente injector.,a extensão da aplicação torna-se mais fácil.
- ajuda a permitir o acoplamento solto, o que é importante na programação de aplicações.
desvantagens de DI
- É um pouco complexo de aprender, e se super utilizado pode levar a problemas de gestão e outros problemas.
- muitos erros de tempo de compilação são empurrados para o tempo de execução.os quadros de injeção de dependência são implementados com reflexão ou programação dinâmica. Isto pode impedir o uso da automação IDE, como “encontrar referências”, “mostrar hierarquia de chamadas” e refactoring seguro.,
pode implementar a injecção de dependência por si próprio (baunilha pura) ou usar bibliotecas ou estruturas de terceiros.
Bibliotecas e Frameworks que implementam DI
- Spring (Java)
- Google Guice (Java)
- Castle Windsor (. net)
- Unity (.,NET)
punhal (Java e Android)
Para saber mais sobre injeção de dependências, você pode conferir os recursos abaixo:
Java Injeção de Dependência — DI Design Pattern Exemplo Tutorial — JournalDev
Usando a injeção de dependência em Java — Introdução — Tutorial — Vogella
a Inversão de Controle de Contêineres e o padrão de Injeção de Dependência — Martin Fowler
Espero que ajude!se gostou do artigo e quer ler artigos mais impressionantes, então siga-me aqui (Bhavya Karia) e mostre o seu apoio, pois isso motiva-me a escrever mais.,se você tiver alguma dúvida ou feedback para mim, vamos nos conectar no LinkedIn , Twitter, Facebook.
Editar 1:
graças a Sergey Ufocoder agora este artigo foi convertido para a língua russa. Os meus amigos russos e que todos sabem ler a língua russa dão-lhe uma leitura.
Link para o artigo
também, se você quiser aplicar DI em JavaScript e estiver procurando por uma biblioteca, então Jo Surikat sugere que você dê uma tentativa para sua biblioteca.
Di-Ninja
Mais uma biblioteca di impressionante em JavaScript foi sugerido por Nicolas Froidure.,
knifecycle
Edit 2:
Se você é um desenvolvedor de PHP então não se preocupe, você tem tudo coberto também. O Gordon Forsythe recomendou esta fantástica biblioteca, que talvez queiram experimentar.auryn obrigado por todas as palavras amáveis que tenho recebido. Compartilhe o artigo para que cada vez mais pessoas possam ser beneficiadas.