Clean Architecture no NestJS 🏛️🚀
Tags: cleanarchitecture, javascript, nestjs, programming
Published: 2024-04-29 14:51:49

## 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 📁🔍

```plaintext
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! 💪😊