DEV Community

Cover image for Injeção de dependência
Erica Rodrigues
Erica Rodrigues

Posted on

Injeção de dependência

A injeção de dependência é um tema fundamental para projetos desenvolvidos com as melhores práticas de mercado, pois além de ajudar a manter um código limpo e modularizado, esse tópico é responsável também por uma das letrinhas do grandioso acrônimo - SOLID, sendo o D desses princípios.

O Dependency Inversion Principle, princípio da inversão de dependência, promove uma estrutura flexível onde as partes do código dependem de abstrações em vez de detalhes específicos de implementação. Dessa forma, conseguimos desenvolver uma arquitetura mais flexível e de fácil manutenção.

Baseado nesse princípio, foi desenvolvida a técnica de “Injeção de Dependência” que permite que os módulos recebam as dependências de uma fonte externa em vez de criá-las internamente. Promovendo a reutilização de código, possibilidade de modularização e maior testabilidade, tendo em vista a independência das implementações específicas.

No Flutter existem algumas bibliotecas bastante presentes no mercado, onde cada uma delas traz características próprias, além de vantagens e desvantagens na sua utilização. O ideal é experimentar algumas bibliotecas para entender qual se adequa melhor ao seu projeto. Algumas das mais populares são: GetIt, Provider e Riverpod.

Para implementar a injeção de dependências em nossos projetos precisamos seguir alguns passos que ficariam resumidamente assim:

  1. Definir serviços e dependências: criar classes para os serviços e dependências que o aplicativo precisará, por exemplo, um serviço de autenticação, um serviço de banco de dados, etc.
  2. Registrar as dependências: temos que configurar o aplicativo para registrar as dependências necessárias. Isso pode ser feito no método main() ou em um arquivo dedicado de inicialização.
  3. Acessar as dependências: com o arquivo configurado, em qualquer lugar do aplicativo, poderemos acessar as dependências registradas com o auxílio de uma biblioteca. Por exemplo, para acessar o serviço de autenticação utilizando o GetIt, você poderia fazer algo como GetIt.instance<AuthService>().
  4. Utilizar as dependências: Use as dependências onde forem necessárias no seu código, mantendo a lógica separada da criação de objetos.

Em outras palavras é como se o nosso código se comportasse como um grande quebra-cabeça, onde cada peça é representada por um serviço ou uma funcionalidade da aplicação e ao utilizarmos a injeção de dependências estamos montamos cada uma dessas peças separadamente e vamos encaixando ao longo das funcionalidades a medida que forem necessárias. Assim conseguimos montar o quebra-cabeças bem mais rápido e de maneira mais simples.

Top comments (0)