Pular para o conteúdo
.NETO que é DDD e a linguagem ubíqua
Módulo 07Domain-Driven Design (DDD)

O que é DDD e a linguagem ubíqua

avancado 35 min de leitura·Atualizado · .NET 9
Resumo

Domain-Driven Design (DDD) é modelar o software espelhando o negócio: o código fala a mesma língua dos especialistas do domínio. Antes dos padrões táticos, é preciso entender o domínio, seus subdomínios e a linguagem ubíqua.

1. Objetivos de Aprendizagem#

  • Entender o que DDD resolve — e quando não vale a pena.
  • Distinguir o DDD estratégico do tático.
  • Reconhecer a linguagem ubíqua e refleti-la no código.

2. Pré-requisitos#

  • Web API e Onion Architecture (Módulo 03).
  • Classes, propriedades e encapsulamento (Aula 5.1).

3. Conceito#

DDD é uma abordagem para software de domínio complexo: em vez de organizar o código por detalhes técnicos, você o organiza em torno do negócio. A premissa central é que devs e especialistas do domínio devem compartilhar o mesmo vocabulário — e esse vocabulário deve aparecer no código.

DDD tem dois lados:

  • Estratégico (o mapa): identifica o domínio (o problema do negócio) e seus subdomínios:
    • Core — o que diferencia o negócio (ex.: a precificação de um catálogo). É onde vale investir.
    • Supporting — apoia o core, mas não é o diferencial (ex.: cadastro de categorias).
    • Generic — resolvido igual em qualquer lugar (ex.: autenticação — use uma solução pronta). Também define os bounded contexts: fronteiras onde um termo tem um significado único.
  • Tático (as ferramentas): entidades, value objects, agregados, repositórios, domain services e domain events — o assunto das próximas aulas.

A linguagem ubíqua é o coração do DDD: um vocabulário compartilhado entre time técnico e especialistas, sem tradução. Se o negócio diz "reajustar preço", o código tem produto.Reajustar(...) — não UpdateProdutoService.SetPreco(...).

Quando NÃO usar DDD: um CRUD simples (cadastro sem regras) não precisa de agregados nem value objects. DDD paga o próprio custo apenas onde há regras de negócio ricas. Aplicá-lo a tudo é over-engineering.

4. Mão na Massa#

Vamos usar o domínio deste curso — um catálogo — como exemplo contínuo. Antes de escrever código, mapeie a linguagem com o "especialista":

Termo do negócioSignificadoVira, no código…
ProdutoItem vendável, com preço e categoriaEntidade Produto
PreçoValor + moeda; nunca negativoValue Object Dinheiro
ReajusteAumentar/reduzir o preço por um percentualMétodo Produto.Reajustar(percentual)
CatálogoConjunto de produtos de uma categoriaContexto/agregado

A regra prática: substantivos do negócio viram tipos; verbos viram métodos. Se um termo não existe no código, ou existe com outro nome, a linguagem ubíqua foi quebrada.

C#
// Fala a língua do negócio: o método É a operação "reajustar".
produto.Reajustar(0.10m);   // aumenta 10%

// NÃO fala: expõe o "como" técnico, não o "o quê" do negócio.
produto.Preco = produto.Preco * 1.10m;

5. Exemplo Completo#

Modelar o catálogo com DDD começa por perguntas de negócio, não técnicas: o que é um preço válido? quem pode reajustar? um produto sem categoria existe? As respostas viram invariantes (regras sempre verdadeiras) que o modelo vai proteger — o oposto de um saco de get; set; manipulado por fora.

6. Boas Práticas e Armadilhas#

FaçaEvite
Nomear tipos e métodos com os termos do negócioNomes técnicos genéricos (Manager, Helper, Data)
Aplicar DDD onde há regras ricas (core)Usar agregados/VOs num CRUD trivial
Conversar com o especialista e ajustar a linguagemTraduzir termos do negócio para "tecniquês"

7. Segurança e Produção#

  • Um modelo alinhado ao negócio reduz mal-entendidos que viram bugs caros. As regras ficam num só lugar (o domínio), facilitando auditoria e evolução.

8. Exercícios#

  • Fácil: liste 5 substantivos e 5 verbos do domínio de um "carrinho de compras".
  • Médio: classifique 3 subdomínios de um e-commerce em core/supporting/generic.
  • Desafio: aponte, numa API CRUD que você conheça, um nome de classe que quebra a linguagem ubíqua e proponha o nome do negócio.

9. Resumo#

DDD modela o software em torno do negócio. O estratégico define domínio, subdomínios e fronteiras; a linguagem ubíqua garante que o código fale a língua do especialista. Os padrões táticos vêm a seguir.

10. Próximos Passos#

Os primeiros blocos táticos: entidades e value objects.

11. Referências#

44-01 — O que é DDD e a linguagem ubíqua | Curso ASP.NET Core