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