DUVIDAS SOBRE INJEçãO DE DEPENDENCIAS

 Tópico anterior Próximo tópico Novo tópico

DUVIDAS SOBRE INJEçãO DE DEPENDENCIAS

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#497019 - 22/05/2021 19:39:14

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


Última edição em 22/05/2021 19:45:02 por NOWLIGHTS

Boa tarde,

estou estudando sobre injeção de dependências e me surgiram algumas duvidas.

Atualmente trabalho sempre em uma arquitetura em 3 camadas sendo elas, UI, BLL e DAL. Para uma injeção de dependência, eu teria que criar outra biblioteca de classes somente para as interfaces?

Outra duvida é, seguindo na arquitetura que mencionei acima, em 95% dos casos, as conexões são apenas CRUD simples, existe a necessidade de injeção de dependência??

__________________________________
- Everyone has a chance


Resposta escolhida #497030 - 24/05/2021 02:07:08

DS2T
BARRA MANSA
Cadast. em:Novembro/2010


Boa noite.


Citação:
Para uma injeção de dependência, eu teria que criar outra biblioteca de classes somente para as interfaces?


Na maioria dos casos isso não é recomendado. Se você coloca todas as interfaces no mesmo assembly, você acaba criando um acoplamento entre as camadas. Isso significa que se um dia você precisar usar a camada de BLL em um outro projeto - digamos - com uma camada de apresentação otimizada para mobile ou um windows service/worker, estaria tendo que levar essa biblioteca de interfaces junto. E nele teria várias coisas de UI sem necessidade, por exemplo.

Além do mais, quando falamos de injeção de dependência, estamos justamente trabalhar no desacoplamento entre as classes.
Pegando, por exemplo, a comunicação entre sua BLL e sua DAL:

Quando você faz sua regra de negócio e tem que persistir algo no banco de dados, você não tem que saber se o banco de dados é relacional, nosql ou se você está gravando num arquivo binário simples. Ou seja, não importa a implementação disso pra BLL, você apenas precisa saber que deverá chamar alguém que irá persistir seus dados. Isso significa que eles irão conversar sob um contrato (interface), apenas.

Se um dia você quiser trocar a persistência do SQL Server para um DynamoDb, por exemplo, a sua classe BLL não deveria ser modificada. Exatamente aí que entra a injeção de dependência. Você passa a sua DAL como dependência para a BLL. Não importando a implementação, somente a interface. Se um dia você quiser mudar a implementação, vai criar uma classe com o mesmo contrato e a implementação desejada. Mudou no container e nem precisou modificar nada do arquivo de BLL.



Citação:
Outra duvida é, seguindo na arquitetura que mencionei acima, em 95% dos casos, as conexões são apenas CRUD simples, existe a necessidade de injeção de dependência??


O que eu comentei acima, responde um pouco da sua dúvida já. Essa facilidade de poder mudar implementações sem precisar mexer nas classes que chamam esses métodos é muito bom. Dá bastante flexibilidade.
Mas vamos supor, por exemplo, que você tem certeza absoluta que nunca vai mudar o banco de dados porque já tem uma licença paga (apesar de que a gente nunca tem esse tipo de certeza).

Ainda assim existe uma razão para usar a injeção de dependência.
Repare que se você acoplar a BLL com a sua DAL, você não conseguirá realizar testes unitários.
Lembrando de um dos conceitos de testes unitários: Eles sempre rodam no escopo da sua aplicação - nunca vão para fora (acessa banco, internet, etc).  Isso significa que você, mesmo assim, precisaria de uma segunda implementação do contrato da DAO para poder realizar o teste unitário, por exemplo, para simular a entrada dos dados na memória utilizando de uma estrutura List<>.


Se você não tem interesse em realizar testes unitários e tem certeza que a classe não poderá ter uma segunda implementação, ainda assim, deixar o código desacoplado facilita na manutenção.

Mas claro, tudo depende do grau de acoplamento que você deseja entre as classes. Por exemplo, existem classes que só fazem sentido dentro do escopo de outra classe e sua implementação não vai mudar. Além disso, não faz nenhum acesso externo. Será que vale a pena usar injeção de dependência pra isso? Particularmente, eu entendo que o acoplamento as vezes é algo bom (senão, não existiria herança, apenas composição).







Não nasci pra programar, mas preciso me alimentar...


#497046 - 25/05/2021 17:48:52

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


Obrigado pela excelente explicação, as ideias ficaram mais claras.

__________________________________
- Everyone has a chance


 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por NOWLIGHTS em 25/05/2021 17:48:59