Architecture

WS-46 com Phillip Calçado: Meu Primeiro Mergulho Real em Domain-Driven Design

Transforme sua mentalidade de modelagem com um mestre em DDD—descubra como o workshop de Phillip Calçado revela o poder da linguagem ubíqua, modelagem de domínio e pensamento além de padrões de código

No dia 17 de novembro de 2009, participei de um workshop que se tornou um divisor de águas na minha trajetória como desenvolvedor. Foi o curso WS-46 da Caelum sobre Domain-Driven Design (DDD) com Phillip Calçado — nome que eu já acompanhava havia tempos, seja pelo blog ou pelas apresentações.

Não era um curso sobre frameworks ou sobre como usar melhor o Java. Era um curso sobre como pensar, modelar e se comunicar ao construir software de verdade. Para alguém como eu, apaixonado por clean code, padrões de projeto e programação orientada a objetos — mas sem experiência prática ou mentoria em DDD — foi um choque de realidade e aprendizado.

A Abertura: O quê, como e qual?

Phillip abriu o curso com três perguntas simples, mas profundas:

  • O quê estamos construindo?
  • Como esperam que façamos isso?
  • Qual decisão podemos tomar frente aos compromissos do projeto?

Essa abordagem moldou todo o workshop. Fomos divididos em grupos para modelar um sistema real (um estacionamento), apenas com histórias de usuário. Sem classes prontas. Sem diagrama pronto. Só conversa, análise e decisões.

A linguagem é o modelo

Um dos conceitos mais repetidos durante o curso foi o de linguagem ubíqua. Não é apenas um glossário técnico — é uma disciplina em que todos os nomes de classes, métodos e diagramas devem refletir o mesmo vocabulário compartilhado com os especialistas do negócio.

Phillip reforçou que um modelo só é útil se for implementado em código e usado em reuniões. Do contrário, caímos na velha armadilha de traduzir requisitos, o que gera bugs e má comunicação.

“O maior valor de um modelo de domínio é fornecer uma linguagem que conecta desenvolvedores e especialistas.”

Sprint de Modelagem

Durante mais de quatro horas, só modelamos. Sem código. Sem padrão. Só rascunhos, discussões, refatorações e redefinições.

depois de termos um entendimento comum, começamos a trabalhar com os blocos:

Bloco de ConstruçãoPropósito
EntidadeObjeto com identidade que evolui ao longo do tempo
Objeto de ValorImutável, definido por seus atributos
AgregadoAgrupamento de objetos governado por uma raiz
RepositórioInterface para acessar e persistir agregados
ServiçoOperação que não se encaixa naturalmente em uma entidade

Ciclo de Vida e o Problema do ID Falso

Phillip abordou o problema de projetar entidades sem identidade real. Ele referenciou seu post clássico “Don’t Trust Fake IDs” e mostrou como deixar o banco ditar o design é um erro.

“Se você não sabe quem é um objeto sem o banco, ele não é uma entidade — é só uma linha.”

No nosso grupo, discutimos se TicketDeEstacionamento deveria ser entidade ou objeto de valor. A resposta dependia do comportamento que queríamos representar — e esse era o aprendizado.

Arquitetura em Camadas na Prática

Exploramos a estrutura tradicional de camadas do DDD, mas sempre focando no comportamento e no fluxo — e não no framework.

CamadaPapel
DomínioCoração da lógica de negócio e das invariantes
AplicaçãoCoordena os casos de uso e a interação com o domínio
InfraestruturaInterface com banco de dados, APIs, filas, mensageria, etc.
ApresentaçãoInterface com usuário (UI, REST, eventos…)

Phillip era cético com overengineering. Só adicionava camada se ela ajudasse na clareza do domínio.

Quando Não Dá Pra Falar de DDD

Um dos aprendizados mais libertadores: você não precisa usar termos como “Aggregate” ou “Entidade” para aplicar DDD. Muitas vezes, Phillip evita esses termos com clientes e foca em modelar responsabilidades e fluxos naturais.

Isso me deu confiança para começar a aplicar os conceitos mesmo em projetos que não eram “greenfield”.

O Erro Comum do Mercado

Com base em seu texto “Nevermind Domain-Driven Design”, ele criticou a obsessão da indústria por repositórios e camadas técnicas, ignorando a essência: a linguagem e o modelo alinhado com o negócio.

“Se tudo que você levou do DDD foi uma classe Repository, você perdeu o ponto.”

Exemplo: Sistema de Estacionamento (UML)

Aqui está um modelo simplificado baseado no exercício do curso:

Modelo de Domínio do Estacionamento

Discutimos profundamente se o ticket era uma entidade. A resposta dependia do que queríamos garantir no nosso domínio.

Design como Conversa

Mais do que código, DDD virou uma forma de conversar. Nome de classe, regra de validação, método público — tudo comunica o que entendemos do domínio.

Comecei a enxergar código não só como instrução, mas como documentação de entendimento.

Considerações Finais

Esse foi um dos melhores cursos técnicos que já participei. Não por slides (quase não teve), nem por ferramentas (mal abrimos a IDE). Mas porque me ensinou uma forma de pensar e modelar.

Phillip foi generoso, claro, provocativo. Mostrou que DDD não é religião nem bala de prata. É postura — começa com escuta, nomeação e iteração, não com framework.

Se tiver oportunidade de fazer um curso com ele, vá.


Postado no dia seguinte ao curso WS-46, ainda empolgado com tudo que aprendi.