Injeção de Dependências (DI) utilizando Python

Marcos Vinicios da Silveira
2 min readFeb 11, 2023

--

O propósito deste post é ampliar a compreensão sobre os padrões utilizados no microsserviço de Ordering, que foi abordado em meu artigo anterior intitulado “Migrando sistemas monolíticos para microsserviços com Domain Driven Design”. Em particular, vamos nos concentrar na técnica de Injeção de Dependências (DI), como ela é aplicada em nosso adaptador REST.

Exemplo do trecho de código implementado.

Oque é Injeção de Dependências?

A injeção de dependências é um princípio do SOLID (Princípios de Design Orientado a Objetos) que se refere à prática de passar objetos de dependência como argumentos para um objeto ao invés de criá-los internamente. Isso ajuda a tornar o código mais fácil de manter e testar, pois torna mais fácil alterar a implementação das dependências sem afetar a classe que as usa. A injeção de dependências faz parte do princípio SOLID de Responsabilidade Única (SRP).

Código altamente acoplado

Abaixo temos um exemplo de um código que está altamente acoplado onde caberia a utilização da Inversão de Controle.

O código é interpretado normalmente, mais se observarmos ele contém alguns problemas de alto acoplamento. Quando é instanciado a classe Computador criamos uma dependência da classe MouseDeviceUSB3 e KeyboardUSB3, caso essa classe sofra alguma modificação, exemplo seja incluído algo no método ou em seu construtor, teríamos que ajustar também a classe Computer.

Implementação da Injeção de Dependência

Existem algumas maneiras de se implementar a Injeção de Dependência, são elas;
Construtor: Neste modelo é implementada a injeção na definição dos construtores das classes;
Métodos Acessores Getter e Setters: É definida a injeção nos gets e sets das classes;
Interfaces Implementations: Modo em que é utilizado interfaces para realizar a injeção de dependências;

Assim, fazendo o ajuste no código usando as interfaces e a chamada no controle teríamos o seguinte código:

Aqui, a classe Computador depende da classe Dispositivo, mas não é responsável por criá-la. Em vez disso, as instâncias de Dispositivo são fornecidas no construtor de Computador. Isso permite que a classe Computador seja reutilizável e testável, pois não está vinculada a uma implementação específica de Dispositivo. Além disso, permite a inversão de controle, onde o controle de instância de dependências é passado para o objeto que as depende, em vez de serem instanciadas dentro desses objetos.

Conclusão

A injeção de dependência é a arte de criar relacionamentos de serviço/cliente que funcionam bem juntos, injetando serviços que são facilmente trocados com o mínimo de tempo e esforço.

Embora os componentes sejam mutuamente dependentes, a substituição de um não prejudicará nem inutilizará o outro.

Referências:

--

--