Fale sobre injeção de dependência
Na programação orientada a objetos, o problema com o qual frequentemente lidamos é a dissociação. Quanto menor o acoplamento do programa indica a legibilidade e manutenção do programa. A inversão do controle (inversão de controle ou COI) é um princípio de design comumente usado da programação orientada a objetos. Usando esse princípio, podemos reduzir o acoplamento. Entre eles, a injeção de dependência é a implementação mais usada da inversão de controle.
O que é dependência
A dependência é um fenômeno comum nos programas. Por exemplo, a energia da instância da classe Gasenergy é usada no carro de classe. A prática usual é criar explicitamente uma instância da aula de gasenergia na classe de carros e atribuí -la à energia. Como mostrado no código a seguir
Energia da interface {} classe Gasenergy implementa energia {} classe Car {Energy Energy = new GasEnergy ();}Existem problemas
Os carros da classe assumem responsabilidades desnecessárias e são responsáveis pela criação de objetos de energia, que inevitavelmente têm acoplamento sério. Para dar um exemplo realista, é de responsabilidade do carro usar qual energia um carro usa não depende do carro, mas do fabricante do carro.
Escalabilidade. Supondo que queremos modificar a energia da energia elétrica, devemos modificar a classe de carro, que obviamente não cumpre o princípio do fechamento aberto.
Não propício ao teste de unidade.
Injeção de dependência
A injeção de dependência é um comportamento. No carro de classe, o objeto Gasenergy não é criado ativamente, mas a dependência é definida passando -o no objeto GasEnergy externamente. Existem três métodos comuns de injeção de dependência.
Injeção de construtor
Passe a dependência necessária como parâmetros do construtor para concluir a injeção de dependência.
Classe Car {Mennergia Energética; Public Car (Energy Energy) {Menergy = Energy; }}Injeção do método do setter
Adicione o método do setter, o parâmetro é a dependência que precisa ser injetada e a injeção de dependência pode ser concluída.
Classe Car {Mennergia Energética; public void setEnergy (energia energética) {Menergy = Energy; }}Injeção de interface
A injeção de interface é evidente, é criar um conjunto de interfaces para injeção de dependência e a dependência é passada como parâmetros, e a injeção de dependência para a implementação específica é concluída chamando uma interface unificada.
Interface EnergyConsumerInterface {public void setErgy (energia Energy);} classe CAR IMPLEMENTOS DE ENERENCIONCONSUMERInterface {Energy Menergy; public void setEnergy (energia energética) {Menergy = Energy; }}A injeção de interface é semelhante à injeção do método do setter, a diferença é que a injeção de interface usa um método unificado para concluir a injeção, enquanto o nome do método da injeção do método do setter é relativamente casual.
Trade-offs da estrutura
Existem muitas estruturas para injeção de dependência, a mais famosa é o Guice. Obviamente, a primavera também suporta injeção de dependência. Guice usa anotações de leitura de tempo de execução, gera dependências e as injeta através da reflexão. Este formulário não é muito adequado para dispositivos móveis Android. Afinal, essas operações são processadas em tempo de execução e têm requisitos de alto desempenho.
A Dagger é uma biblioteca de injeção de dependência adequada para o desenvolvimento do Android. Ele também usa a forma de anotações de classe. A diferença é que ele gera classes auxiliares no momento da compilação e aguarda até que as classes auxiliares geradas sejam usadas para concluir a injeção de dependência em tempo de execução.
Use ou não
De fato, usar ou não usar a estrutura é um problema. Se você usar a estrutura, todos na equipe devem seguir as instruções para escrever código para resolver a injeção de dependência. Essas estruturas não são fáceis de começar, e os coeficientes de aprendizado são relativamente complexos e difíceis de dominar, o que também é um problema que precisa ser considerado.
Minha opinião pessoal é que não recomendamos ou nos opomos ao uso dessas estruturas, mas sinto que às vezes esperamos uma estrutura, por isso é melhor prestar atenção a esses problemas em nossa vida diária. A evasão artificial também não é um requisito básico para nós mesmos?
Pesquisa de dependência
A pesquisa de dependência é a implementação específica do princípio de inversão de controle, diferentemente da aceitação passiva da injeção de dependência, a pesquisa de dependência é uma solicitação ativa. Quando necessário, o objeto é obtido chamando os métodos fornecidos pela estrutura. Ao obter, são necessários caminhos de arquivo de configuração relevantes, chaves e outras informações para determinar o estado do objeto que está sendo obtido.
O exposto acima é uma introdução detalhada às informações sobre injeção de dependência. Continuaremos a adicionar informações relevantes no futuro. Obrigado pelo seu apoio a este site!