An open API service indexing awesome lists of open source software.

https://github.com/joschonarth/node-clean-domain

đŸ§© Independent and decoupled Domain Layer, developed following the principles of DDD, to model business rules in a clear, consistent and reusable way.
https://github.com/joschonarth/node-clean-domain

aggregate-root clean-architecture ddd design-patterns domain domain-driven-design domain-events either eslint factory-pattern in-memory nodejs solid tdd typescript value-object vitest watched-list zod

Last synced: 4 months ago
JSON representation

đŸ§© Independent and decoupled Domain Layer, developed following the principles of DDD, to model business rules in a clear, consistent and reusable way.

Awesome Lists containing this project

README

          

đŸ§© Camada de DomĂ­nio com DDD e Clean Architecture

Camada de DomĂ­nio independente e desacoplada, desenvolvida seguindo os princĂ­pios do Domain-Driven Design e da Clean Architecture, para modelar regras de negĂłcio de forma clara, consistente e reutilizĂĄvel.

## 📑 Índice

- [📖 Visão Geral](#-visão-geral)
- [đŸ› ïž Tecnologias Utilizadas](#-tecnologias-utilizadas)
- [⚙ Funcionalidades](#-funcionalidades)
- [📚 Conceitos Aplicados](#-conceitos-aplicados)
- [đŸ—‚ïž Estrutura do Projeto](#-estrutura-do-projeto)
- [đŸ§Ș Testes](#-testes)
- [🌐 Relação com a API](#-relação-com-a-api)
- [đŸ€ ContribuiçÔes](#-contribuiçÔes)
- [⭐ Apoie este Projeto](#-apoie-este-projeto)
- [📞 Contato](#-contato)

## 📖 Visão Geral

Este projeto representa a camada de domínio de uma aplicação construída com base nos princípios do **Domain-Driven Design (DDD)** e da **Clean Architecture**.

ResponsĂĄvel por centralizar as regras de negĂłcio, o domĂ­nio Ă© totalmente independente de frameworks e infraestrutura, tornando-o reutilizĂĄvel, testĂĄvel e manutenĂ­vel.

A modelagem segue os fundamentos do **DDD**, com foco em refletir com fidelidade os processos centrais de um fĂłrum, como o gerenciamento de usuĂĄrios, tĂłpicos, postagens, respostas e comentĂĄrios.

## đŸ› ïž Tecnologias Utilizadas

- 🟱 **Node.js**: Plataforma para execução do JavaScript no servidor.
- 🟩 **TypeScript**: Tipagem estática para segurança e escalabilidade.
- đŸ§Ș **Vitest**: Testes de unidade para garantir a integridade das regras de negĂłcio.
- đŸ§© **Zod**: Validação de entidades e objetos de valor.
- ⚙ **ESLint**: Padronização e qualidade de cĂłdigo.

## ⚙ Funcionalidades

- 📝 **Criação e gestão de perguntas**: Usuários podem criar, editar e excluir suas próprias perguntas no fórum.
- 💬 **Sistema de respostas**: Respostas podem ser adicionadas a perguntas e editadas ou excluídas posteriormente.
- đŸ—šïž **Sistema de comentĂĄrios**: ComentĂĄrios podem ser adicionados a perguntas e respostas, alĂ©m de poderem ser editados ou excluĂ­dos.
- 🏆 **Escolha da melhor resposta**: O autor de uma pergunta pode marcar uma resposta como a melhor solução.
- 🔍 **Busca de perguntas e respostas**: Permite consultar perguntas recentes, respostas e seus respectivos comentários.
- đŸ—‘ïž **Gerenciamento de conteĂșdo**: Permite a exclusĂŁo de perguntas, respostas e comentĂĄrios especĂ­ficos.

## 📚 Conceitos Aplicados

- đŸ§© **Domain-Driven Design (DDD)**: Foco no domĂ­nio de negĂłcio como nĂșcleo da aplicação.
- đŸ›Ąïž **Clean Architecture**: Separação de responsabilidades e independĂȘncia de frameworks.
- đŸ§± **Entidades e Value Objects**: Organização robusta de dados e comportamentos.
- 📂 **RepositĂłrios como Contratos**: PersistĂȘncia desacoplada e flexĂ­vel.
- đŸ§č **SOLID**: Aplicação de princĂ­pios para alta manutenibilidade e extensibilidade.
- đŸ§Ș **TDD (Test-Driven Development)**: Desenvolvimento orientado a testes desde o inĂ­cio.
- 🔄 **In-Memory Repository**: RepositĂłrio volĂĄtil usado para testes e simulaçÔes sem dependĂȘncia externa.
- 🏭 **Factory Pattern**: Criação estruturada de objetos para testes ou instñncias complexas.
- 🧠 **Design Patterns**: Aplicação de padrĂ”es de projeto para promover reutilização, flexibilidade e clareza na modelagem.
- 🌐 **Domain Events**: Comunicação entre partes do sistema atravĂ©s de eventos explĂ­citos do domĂ­nio.
- 🔗 **Aggregate Root**: Entidades raiz que garantem a integridade e consistĂȘncia de um agregado.
- 📜 **Watched List**: Lista observĂĄvel usada para rastrear mudanças em coleçÔes (ex: notificaçÔes de alteraçÔes).
- ↔ **Either**: Abordagem funcional para tratamento explĂ­cito de erros e retornos esperados.

## đŸ—‚ïž Estrutura do Projeto

A estrutura do projeto estå organizada com foco em **modularidade**, **separação de responsabilidades** e adesão à **Clean Architecture**. A seguir, um panorama das principais pastas e seus propósitos:

```plaintext
node-clean-domain/
├── src/
│ ├── core/ # Camada genĂ©rica e compartilhada entre os domĂ­nios
│ │ ├── entities/ # Entidades base como AggregateRoot e WatchedList
│ │ ├── errors/ # Erros e exceçÔes globais do domĂ­nio
│ │ ├── events/ # Eventos de domĂ­nio genĂ©ricos
│ │ ├── repositories/ # Contratos genĂ©ricos de repositĂłrios
│ │ ├── types/ # Tipos utilitários
│ ├── domain/ # Camadas específicas por contexto de domínio
│ │ ├── forum/
│ │ │ ├── application/ # Casos de uso e interfaces da camada de domínio
│ │ │ │ ├── repositories/ # Contratos específicos de repositórios para o fórum
│ │ │ │ └── use-cases/ # Casos de uso do fórum
│ │ │ ├── enterprise/ # Entidades e regras de negócio específicas do fórum
│ │ │ │ ├── entities/ # Entidades
│ │ │ │ │ └── value-objects/ # Objetos de valor do domínio fórum
│ │ │ │ └── events/ # Eventos específicos do domínio fórum
│ │ ├── notification/
│ │ │ ├── application/ # Camada de aplicação do domĂ­nio de notificaçÔes
│ │ │ │ ├── repositories/ # Contratos de persistĂȘncia para notificaçÔes
│ │ │ │ ├── subscribers/ # Assinantes de eventos
│ │ │ │ └── use-cases/ # Casos de uso para notificaçÔes
│ │ │ └── enterprise/ # Entidades do domĂ­nio de notificaçÔes
│ │ │ └── entities/
├── test/
│ ├── factories/ # Fábricas para criação de entidades e objetos de teste
│ ├── repositories/ # ImplementaçÔes in-memory dos repositĂłrios para testes
│ └── utils/ # Utilitários de suporte aos testes
```

## đŸ§Ș Testes

Este projeto inclui **testes unitĂĄrios** para garantir a confiabilidade e o funcionamento correto dos recursos implementados. Para executar os testes, utilize os seguintes comandos:

- **Executar testes unitĂĄrios:**

```bash
npm run test
```

- **Executar testes unitårios em modo de observação:**

```bash
npm run test:watch
```

## 🌐 Relação com a API

Esta camada **Domain** é utilizada pela aplicação que expÔe a **API**, responsåvel por disponibilizar os recursos para consumo externo.
A aplicação da **API** utiliza as entidades e regras definidas no **Domain** para realizar suas operaçÔes de forma consistente.

👉 VocĂȘ pode acessar o repositĂłrio da API [aqui](https://github.com/joschonarth/nest-clean-api).

## đŸ€ ContribuiçÔes

ContribuiçÔes sĂŁo muito bem-vindas! Sinta-se Ă  vontade para abrir issues ou pull requests com melhorias ou correçÔes. 🚀

## ⭐ Apoie este Projeto

Se vocĂȘ gostou da aplicação, deixe uma ⭐ no repositĂłrio!

## 📞 Contato

[![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/joschonarth/)
[![Gmail](https://img.shields.io/badge/Gmail-D14836?style=for-the-badge&logo=gmail&logoColor=white)](mailto:joschonarth@gmail.com)