Skip to content

vzsoares/inversao-de-dependencia

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Inversão de Dependência na Prática

Neste repositório, vamos implementar a inversão de dependência (Dependency Inversion - DI) na prática.

main

🤔 Contexto:

A inversão de dependência em programação é sobre desacoplar regras e abstraí-las para uma camada superior, permitindo uma gestão mais limpa e isolamento da regra.

Vamos implementar a arquitetura em camadas (Layered Architecture), separando dados, domínio e apresentação.

🚀 Implementação:

A implementação ocorrerá em 4 passos, conforme a estrutura de arquivos abaixo:

1/  # Aqui tudo estará acoplado
└── main.ts # temos apenas um arquivo );
2/  # Vamos começar desacoplando a camada de persistência
├── store/
│   └── dbSqlRepository.ts # Implementação baseada no Rository Pattern
├── main.ts
└── types.ts  # Arquivo para especificar os tipos da aplicação
3/  # Desacoplaremos as regras de negócio
├── domain/
│   └── fooDomain.ts # Implementação das regras de foo
├── store/
│   ├── dbSqlRepository.ts
│   └── dbNoSqlRepository.ts  # Exemplificando a possibilidade de alteração
├── main.ts
└── types.ts
4/  # E por fim, desacoplamos a camada de apresentação
├── domain/
│   └── fooDomain.ts
├── handlers/
│   ├── getProductApiHandler.ts  # Handlers atendem necessidades específicas
│   └── getProductQueueHandler.ts
├── store/
│   ├── dbSqlRepository.ts
│   └── dbNoSqlRepository.ts
├── main.ts
└── types.ts

Em cada passo, representado pelo nome das pastas, vamos abstrair uma das camadas mencionadas.

1️⃣:

Na primeira iteração, a aplicação está totalmente acoplada e não reutilizável. Se precisarmos da mesma funcionalidade em outro lugar, seria necessário copiar e colar o código 😱

2️⃣:

Aqui é criado a camada de persistência, que é normalmente a primeira a ser extraída, pois permite que toda a aplicação tenha acesso uniforme às informações.

3️⃣:

Na terceira etapa, abstraímos a camada de domínio, que contém as regras de negócio que regem a legalidade das operações.

4️⃣:

Por fim, uniformizamos a disponibilização da aplicação para o mundo exterior através de handlers, utilizando exemplos de API e SQS, que são casos de uso comuns.


Veja o que foi feito:

steps


Ao final, podemos escalar a aplicação horizontalmente, adicionando novos módulos em suas respectivas camadas.

Isso adiciona complexidade e requer mais configuração e planejamento. Talvez não seja necessário para algo muito pequeno, mas é bom se prevenir, não é mesmo? 👼

Agora que você conhece DI, observe em suas aplicações como poderia implementar algo similar, seguindo este princípio! ❤️


📐 Desafio:

Faça você mesmo, baixe o repositório e delete as pastas 2,3 e 4. Depois implemente a inversão de dependência.

🤓 Rodando localmente:

# tsx required
# yarn required

yarn install # instala dependências
tsx ./1/main.ts # roda o arquivo desejado

About

Implementando inversão de dependência passo a passo.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published