DEV Community

Jhones Gonçalves
Jhones Gonçalves

Posted on

Clean Architecture no NestJS đŸ›ïžđŸš€

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:

  1. Entities (Entidades): Representam os objetos de negĂłcio do sistema.
  2. Use Cases (Casos de Uso): Implementam as regras de negĂłcio do sistema.
  3. Interfaces: SĂŁo interfaces que definem como os Use Cases interagem com o mundo externo.
  4. 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

Enter fullscreen mode Exit fullscreen mode

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 (3)

Collapse
 
flavioever profile image
Flavio Ever

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.

Collapse
 
dsaamorim profile image
Douglas

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!

Collapse
 
antonioscript profile image
AntĂŽnio Rocha

Muito bom, irei implementar essa lĂłgica em meus projetos daqui pra frente