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.
- đ VisĂŁo Geral
- đ ïž Tecnologias Utilizadas
- âïž Funcionalidades
- đ Conceitos Aplicados
- đïž Estrutura do Projeto
- đ§Ș Testes
- đ Relação com a API
- đ€ ContribuiçÔes
- â Apoie este Projeto
- đ Contato
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.
- đą 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.
- đ 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.
- đ§© 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.
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
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
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 sĂŁo muito bem-vindas! Sinta-se Ă vontade para abrir issues ou pull requests com melhorias ou correçÔes. đ
Se vocĂȘ gostou da aplicação, deixe uma â no repositĂłrio!