Introdução đ
A arquitetura limpa (Clean Architecture) Ă© um padrĂŁo de arquitetura de software que visa criar sistemas altamente testĂĄveis, escalĂĄveis e independentes de frameworks. Neste artigo, vamos explorar como aplicar os princĂpios da Clean Architecture em um projeto usando o framework NestJS.
O que Ă© Clean Architecture? đ€đ
A Clean Architecture, proposta por "Robert C. Martin"
, enfatiza a separação de preocupaçÔes e a independĂȘncia de frameworks. Ela consiste em vĂĄrias camadas concĂȘntricas, cada uma com uma responsabilidade especĂfica. As camadas principais sĂŁo:
- Entities (Entidades): Representam os objetos de negĂłcio do sistema.
- Use Cases (Casos de Uso): Implementam as regras de negĂłcio do sistema.
- Interfaces: SĂŁo interfaces que definem como os Use Cases interagem com o mundo externo.
- Frameworks e Drivers: SĂŁo as camadas externas que interagem com o sistema, como frameworks web, bancos de dados, etc.
Implementação no NestJS đ ïžđŠ
Vamos implementar a Clean Architecture em um projeto NestJS dividindo-o em mĂłdulos e seguindo uma estrutura de pastas que reflete as camadas da arquitetura.
Estrutura de Pastas đđ
src/
âââ modules/
â âââ users/
â â âââ domain/
â â â âââ entities/
â â â â âââ user.entity.ts
â â â âââ repositories/
â â â â âââ user.repository.ts
â â â âââ services/
â â â âââ user.service.ts
â â âââ application/
â â â âââ dto/
â â â â âââ create-user.dto.ts
â â â âââ interfaces/
â â â â âââ user.interface.ts
â â â âââ use-cases/
â â â âââ create-user.use-case.ts
â â âââ infrastructure/
â â â âââ persistence/
â â â âââ user.persistence.module.ts
â â âââ presentation/
â â âââ controllers/
â â â âââ user.controller.ts
â â âââ dtos/
â â â âââ user.dto.ts
â â âââ view-models/
â â âââ user.view-model.ts
Descrição das Pastas đđ
- Domain: Aqui moram as entidades, repositórios e serviços relacionados ao coração do módulo.
- Application: Este é o cérebro do nosso módulo, onde os casos de uso, interfaces e DTOs fazem a mågica acontecer.
- Infrastructure: Este Ă© o alicerce do nosso projeto, onde implementamos os detalhes de infraestrutura, como mĂłdulos de persistĂȘncia.
- Presentation: Aqui é a hora do show! Contém os controladores, DTOs e view models que dão vida à nossa aplicação.
ConclusĂŁo đđ
A Clean Architecture no NestJS oferece uma maneira estruturada e modular de desenvolver aplicativos, promovendo a testabilidade, a escalabilidade e a manutenibilidade do cĂłdigo. Ao seguir os princĂpios da Clean Architecture, vocĂȘ pode construir sistemas mais robustos e independentes de frameworks.
Neste artigo, exploramos como organizar um projeto NestJS usando a Clean Architecture e uma estrutura de pastas que reflete as camadas da arquitetura. Espero que isso ajude vocĂȘ a criar aplicativos mais eficientes e fĂĄceis de manter. Vamos construir coisas incrĂveis juntos! đȘđ
Top comments (4)
Cara eu ja vi trocentos clean archs da vida mas o seu eu achei deveras peculiar porque voce simplesmente colocou parte do que Ă© o clean code amarrado a estrutura do nest o que em tese fere alguns principios.
Clean Architecture has a single rule: dependencies must always point toward the domain.
Many NestJS projects violate this rule, even those that claim to use Clean Architecture.
NestJS has a key feature that is often misused and ends up breaking the dependency rule.
That same feature, when used correctly (as shown in the documentation), allows the rule to be respected without hacks.
The key is to properly understand the rule and know what to do and what not to do. The documentation explains how to apply the correct option.
OlĂĄ, Boa tarde! Uma dĂșvida
Esses arquivos que estĂŁo apontados, sĂŁo os que vĂŁo para a pasta modules para seguir esse padrĂŁo? Se sim os arquivos que nĂŁo estao apontados, app.controller.spec,app.controller,app.module e entre outros vĂŁo para outra pasta ou ficam na raĂz do src? Muito grato pela atenção!
Muito bom, irei implementar essa lĂłgica em meus projetos daqui pra frente