promovaweb/specsfy

specsfy-specialist-domain-modeling

Descobrir e refinar linguagem ubíqua de domínio, invariantes, eventos, aggregates e bounded contexts a partir de cenários concretos, evitando anemic domain model.

Quelltext ansehen
Originales Skill-Dokument

Aus dem Quell-Repository gerendert; Überschriften, Beispiele, Code, Tabellen, Links und Bilder bleiben erhalten.

Modelagem de domínio

Quando usar

  • Acionar quando um termo do domínio for ambíguo, dois contextos usarem a

mesma palavra com sentidos diferentes, ou uma regra/invariante não tiver owner claro.

  • Acionar também antes de desenhar uma entidade nova quando não estiver

claro se ela é entidade, value object, evento ou apenas uma projeção.

  • Não acionar para decidir topologia de serviços, banco ou infraestrutura —

isso é $specsfy-specialist-software-architecture; a modelagem de domínio informa essa decisão, não a substitui.

  • Combinar com $specsfy-specialist-software-architecture quando um bounded

context novo implicar um boundary de serviço ou de dados novo.

Fluxo

  1. Identificar atores, seus objetivos, os comandos que emitem, os fatos que

já ocorreram (eventos) e as regras que restringem transições.

  1. Coletar os termos reais usados pelas pessoas do domínio — não os nomes de

tabela ou classe já existentes — e expor sinônimos e colisões de sentido.

  1. Construir cenários concretos: caminho feliz, limite, falha e efeito do

tempo (o que muda se o comando chegar tarde, duplicado ou fora de ordem).

  1. Formular cada invariante como uma afirmação sempre verdadeira e atribuir

o owner (o componente/agregado capaz de garanti-la no momento da escrita).

  1. Agrupar comportamento pelo que precisa mudar junto e ser consistente

imediatamente — isso define o limite do aggregate, não a conveniência de consulta.

  1. Testar cada boundary proposto contra um caso que o atravessa: um dado

correto no meio já quebra a fronteira, o boundary está no lugar errado.

  1. Atualizar glossário, mapa de contexto e ADR na fonte autorizada do

projeto — nunca criar um documento de modelo paralelo.

Padrões

  • Nomear pelo vocabulário do domínio (linguagem ubíqua), nunca pela camada

técnica ("Gerenciador", "Handler", "Processor" sozinhos não são domínio).

  • Distinguir entidade (identidade + ciclo de vida), value object (definido

pelo valor, imutável), evento (fato já ocorrido, nome no passado) e projeção (leitura derivada, não fonte de verdade) pelo comportamento que cada um exige, não pela conveniência de implementação.

  • Manter cada invariante junto do componente capaz de garanti-la

atomicamente — invariante que depende de dois agregados sem coordenação é invariante quebrada sob concorrência.

  • Não agrandar um aggregate para facilitar uma consulta; consultas

compostas usam projeção/read model, não um aggregate maior que o necessário para consistência.

  • Separar bounded contexts quando o mesmo termo tem modelos legítimos e

incompatíveis (ex.: "Cliente" no contexto de Vendas vs. "Cliente" no contexto de Suporte podem ter atributos e ciclo de vida diferentes).

  • Nomear eventos no passado ("PedidoConfirmado") e comandos no imperativo

("ConfirmarPedido") — a diferença de tempo verbal comunica se algo já aconteceu ou está sendo solicitado.

  • Validar cada definição com um exemplo que a satisfaz e um contraexemplo

que a quebraria — uma definição sem contraexemplo geralmente é vaga demais para implementar.

Antipadrões

  • Anemic domain model: entidades que são só sacos de campos (getters/

setters) enquanto toda a regra vive em serviços externos — perde a garantia de invariante no ponto de mutação e espalha a regra por múltiplos callers que podem esquecê-la.

  • Usar o mesmo nome de campo/classe em dois bounded contexts assumindo que

significam a mesma coisa — força um dos dois a distorcer seu modelo para caber no vocabulário do outro.

  • Aggregate que cobre o "gráfico de objetos inteiro" para nunca ter que unir

dados depois — cria contenção de escrita e trava concorrência que nada no domínio exige.

  • Documentar o modelo em um arquivo à parte da fonte autorizada (spec,

código) — o documento diverge do sistema real na primeira mudança não sincronizada.

Validação

  • A linguagem usada em spec, código, UI e nomes de coluna/tabela é a mesma

para o mesmo conceito, e distinta quando o conceito é distinto entre contextos.

  • Existem cenários (exemplo + contraexemplo) que exercitam cada invariante e

cada transição relevante do modelo.

  • Nenhum dado tem dois owners capazes de escrever de forma concorrente e

inconsistente sem coordenação explícita.

  • As decisões de modelo (glossário, invariante, boundary) estão registradas

apenas na fonte autorizada do projeto, sem cópia paralela desatualizável.

  • Não declarar um modelo "correto" sem os cenários acima — um modelo sem

contraexemplo testado é uma hipótese, não uma validação.

Skills relacionadas

  • $specsfy-specialist-merge-conflict-resolution preserva intenção quando

conflitos atingem nomes e invariantes do modelo.

  • $specsfy-specialist-prototyping testa hipóteses do domínio sem promover o

protótipo a fonte normativa.

  • $specsfy-specialist-ux-design valida o vocabulário na jornada e

$specsfy-specialist-web-api-design o expõe como contrato público sem transferir ownership.

  • $specsfy-specialist-software-architecture quando um bounded context

novo implicar um boundary de serviço, banco ou deployment.

  • $specsfy-specialist-technical-research quando a decisão de modelo

depender de como um sistema externo já define o mesmo conceito.

Leia references/standards.md para artefatos de modelagem, perguntas-guia, e as fontes primárias de DDD e event storming.

aus demselben Repository

Weitere Skills

Alle Skills
promovaweb
Community

specsfy-specialist-astro

Construir e revisar sites Astro com renderização, content collections, ilhas de interatividade, actions, integrações, imagens, SEO e performance. Use quando houver astro.config ou dependência astro e a tarefa tocar páginas, layouts, componentes, endpoints ou conteúdo; use também para decidir a diretiva de hidratação correta de uma ilha; não use para lógica interna do framework de UI hidratado numa ilha React — aí combine com a skill React.

Installationen
2
GitHub Stars
72
Aktualisiert
1. Sept.
promovaweb
Community

specsfy-specialist-react

Projetar, implementar e revisar interfaces React com composição, estado, efeitos, concorrência, acessibilidade, performance e testes. Use quando a tarefa envolve componentes React, hooks, context, forms ou renderização cliente; use também para decidir ownership de estado entre componente, context e biblioteca externa; não use para fronteiras server/client, cache ou routing de framework — aí use a skill Next.js; para a galeria de componentes visuais prontos, use react-ui-components.

Installationen
2
GitHub Stars
72
Aktualisiert
1. Sept.
promovaweb
Community

specsfy-specialist-tailwind-css

Implementar e revisar Tailwind CSS com tokens, variantes, responsividade, dark mode, container queries e CSS sustentável. Use quando houver tailwindcss ou utilitários Tailwind em templates e a tarefa tocar estilo, tema ou responsividade; use também para decidir entre utilitário, @apply e extração de componente; confirme sempre a versão instalada, pois configuração (tailwind.config vs @theme em CSS) e diretivas mudam entre gerações — não aplique sintaxe de uma versão a outra sem checar o package.json.

Installationen
2
GitHub Stars
72
Aktualisiert
1. Sept.
promovaweb
Community

specsfy-specialist-ui-design

Projetar e revisar interfaces visuais de sistemas, dashboards e aplicações com hierarquia, layout, tokens, componentes, densidade, estados e responsividade. Use para telas, dashboards, design systems, layouts, tabelas, formulários e navegação; combine com UX e acessibilidade quando houver fluxo ou interação.

Installationen
2
GitHub Stars
72
Aktualisiert
1. Sept.