📋 Entity
Objeto com identidade única que persiste no tempo
💡 Exemplo: Usuario { id: UUID, nome: "João", email }, Produto { sku: "PROD-123" }, Pedido { numeroControle: "2024-001" }
💎 Value Object
Objeto imutável sem identidade conceitual
💡 Exemplo: Money { valor: 100, moeda: "BRL" }, Email { valor: "joao@email.com" }, Cor { hex: "#FF5733" } - sempre imutáveis!
🎭 Aggregate
Cluster de objetos tratados como unidade
💡 Exemplo: CarrinhoDeCompras { id, cliente, produtos[], cupom, total } - tudo é salvo/carregado junto, mantém consistência interna
👑 Aggregate Root
Entidade raiz que controla acesso ao aggregate
💡 Exemplo: Pedido é o root. Para adicionar item ao pedido: pedido.adicionarItem(), NUNCA item.adicionarAoPedido()!
🏭 Factory
Encapsula lógica complexa de criação de objetos
💡 Exemplo: PedidoFactory.criarPedidoParaClienteVIP() - aplica regras, descontos, validações complexas na criação
📦 Repository
Abstração para acesso a aggregates persistidos
💡 Exemplo: IPedidoRepository { Salvar(), BuscarPorId(), BuscarPedidosAtivos() } - interface no domínio, implementação na infra
⚙️ Domain Service
Operações de domínio sem estado próprio
💡 Exemplo: CalculadoraDeDescontoService.calcular(cliente, produtos) - lógica que envolve múltiplos aggregates
📢 Domain Event
Representa algo importante que aconteceu
💡 Exemplo: ContaCriadaEvent { contaId, clienteId, data } - outros bounded contexts podem reagir a este evento
📊 Specification
Regras de negócio reutilizáveis e combináveis
💡 Exemplo: ClienteVIPSpec, ProdutoEmPromoçãoSpec, PedidoAprovadoSpec - pode combinar com AND, OR, NOT!