DEV Community

Jhones Gonçalves
Jhones Gonçalves

Posted on

20

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! đŸ’Ș😊

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (2)

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
 
antonioscript profile image
Antînio Rocha ‱

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

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more