Quando estamos a desenvolver um sistema procuramos seguir as boas práticas do desenvolvimento, dentre elas, uma super importante é Single-responsibility principle (SRP), que afirma que cada módulo, classe ou função em um programa de computador deve ter responsabilidade sobre uma única parte da funcionalidade desse programa e deve encapsular essa parte.
Para que o SPR seja seguido é necessário a divisão do programa, essa divisão gera dependências entre as partes, e essa dependências podem ser problemáticas e devem ser evitadas pelos seguintes motivos:
- Modificar a dependência gera impacto de quem depende dela.
- Caso a dependência tenha outras dependências, quem utiliza terá que configurar tudo.
- É trabalhoso testar a implementação.
A injeção de dependência vai tratar os problemas citados acima dessa maneira:
- Utilizará uma interface ou classe base abstraindo a implementação da dependência.
- As configurações dessas dependências podem ser feitas em um só lugar, no caso do .Net, ele oferece um contêiner de serviço interno, o IServiceProvider, geralmente registrado no arquivo Program.cs
- A injeção do serviço acontecerá no constructor da classe que o necessitar, assim tendo a responsabilidade de criar e descartar quando não for mais necessário.
Ao atacar esses problemas com a injeção de dependências geramos o benefício do baixo acoplamento em nosso código, facilitando:
- A extensão.
- O teste.
- A manutenção
- O desenvolvimento de código paralelo, já que o código que necessitava da dependência agora depende de uma abstração e não será modificado sem necessidade.
- Runtime binding (ligação em tempo de execução), é quando tomamos a decisão de executar algo em tempo de execução em vez de tempo de compilação.
Materiais de referência
https://docs.microsoft.com/pt-br/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-6.0
https://en.wikipedia.org/wiki/Single-responsibility_principle
https://app.pluralsight.com/library/courses/using-dependency-injection-on-ramp/table-of-contents
Top comments (0)