Skip to content

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

Notifications You must be signed in to change notification settings

joschonarth/node-clean-domain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

đŸ§© 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

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:

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:

    npm run test
  • Executar testes unitĂĄrios em modo de observação:

    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.

đŸ€ 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 Gmail

Releases

No releases published

Packages

No packages published