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.
- Host: GitHub
- URL: https://github.com/joschonarth/node-clean-domain
- Owner: joschonarth
- Created: 2025-03-02T17:52:40.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2025-05-02T18:35:44.000Z (5 months ago)
- Last Synced: 2025-05-21T12:18:15.977Z (5 months ago)
- Topics: 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
- Language: TypeScript
- Homepage: https://github.com/joschonarth/nest-clean-api
- Size: 148 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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
[](https://www.linkedin.com/in/joschonarth/)
[](mailto:joschonarth@gmail.com)