(Ensaio 01) — Domain-Driven Design
Por que arquitetura importa? Porque software só resolve o problema que alguém entendeu.
Quase todo projeto digital que dá errado começa a dar errado antes da primeira linha de código, numa conversa em que ninguém parou para entender o negócio. Este texto mostra como eu conduzo esse entendimento e como ele vira a estrutura de um produto.
Conversar sobre arquitetura (abre em nova aba)(O argumento) Arquitetura em poucas palavras
Domain-Driven DesignArquitetura é o conjunto de decisões que custam caro para mudar depois. Onde ficam as regras do negócio, como as partes do sistema conversam entre si, o que precisa aguentar um pico de acessos e o que pode esperar.
Quando essas decisões são tomadas sem entender o negócio, o produto até funciona no lançamento. O problema aparece no primeiro pedido de mudança: um ajuste simples mexe em cinco lugares, ninguém sabe o que vai quebrar e cada nova funcionalidade fica mais lenta e mais cara que a anterior.
O Domain-Driven Design, ou DDD, é a abordagem que uso para evitar isso. Em vez de começar pela tecnologia, começo pelo domínio: o jeito como a sua empresa trabalha, as palavras que o seu time usa e as regras que fazem o seu negócio ser diferente dos outros.
- Domínio
- A área de negócio que o software atende, com as regras, os processos e as exceções que só quem vive o dia a dia conhece.
- Linguagem ubíqua
- Um vocabulário comum entre quem entende do negócio e quem escreve o código. A palavra que aparece na reunião é a mesma que aparece no sistema.
- Subdomínio
- Cada parte do negócio, classificada pelo quanto ela diferencia a empresa: núcleo, suporte ou genérica.
- Contexto delimitado
- Uma fronteira dentro da qual cada termo tem um significado só. É a unidade que organiza o sistema e, muitas vezes, o time.
(A base) Três livros na mesa
Base bibliográfica: acho importantíssimo aprender com quem passou pelo mesmo que você.
-
Domain-Driven Design
O livro que deu nome à abordagem. De onde vêm a linguagem ubíqua e os contextos delimitados.
Etapa 02 · Traçar fronteiras -
Implementando Domain-Driven Design
A ponte entre o conceito e o código: agregados, eventos de domínio e integração entre contextos.
Etapa 03 · Modelar o domínio -
Arquitetura Limpa
As regras do negócio no centro, a tecnologia na borda. Framework e banco de dados viram detalhe trocável.
Etapa 07 · Construir e evoluir
Etapa 01
Escutar antes de desenhar
O primeiro entregável de um projeto é uma boa pergunta.
Começo conversando com quem conhece o negócio por dentro: quem decide, quem vende, quem atende e quem opera. Cada um enxerga o problema de um ângulo, e é comum que as versões não batam. Essas diferenças costumam apontar exatamente onde o software vai precisar de mais cuidado.
Nessa fase anoto as palavras que cada pessoa usa, os casos que fogem da regra e os momentos em que alguém diz “depende”. É ali que mora a complexidade real, aquela que nenhum formulário de requisitos captura.
Também pergunto o que acontece se o projeto não for feito. A resposta mostra o tamanho do problema e ajuda a definir quanto vale a pena investir em cada parte.
Etapa 02
Traçar fronteiras
Para o seu médico, você é paciente. Para o financeiro, você é cliente.
Seria estranho ouvir o médico chamar você de cliente. No consultório, você é um paciente: importam os sintomas, o histórico, as alergias e o que foi receitado. Na recepção e no financeiro do mesmo hospital, você é um cliente: importam o documento, o endereço, o convênio e a forma de pagamento.
É a mesma pessoa, mas cada área do negócio enxerga uma versão diferente dela, com dados diferentes. E é bom que seja assim. Você não quer o seu médico olhando o número do seu cartão de crédito, nem alguém do financeiro lendo o seu diagnóstico.
Todo negócio tem os seus “pacientes” e “clientes”. Um sistema que junta tudo num único cadastro de “pessoa” mistura o que deveria estar separado: fica mais arriscado, mais difícil de proteger e mais difícil de mudar.
Por isso desenho contextos delimitados: partes do sistema com fronteira clara, vocabulário próprio e dados próprios. Entre elas, defino com um mapa de contextos o que atravessa cada fronteira, e só isso. Cada parte guarda apenas o que precisa saber, a proteção de dados deixa de ser remendo e passa a fazer parte do desenho, e cada área pode evoluir sem arrastar as outras.
(Mapa de contextos)Exemplo · hospital
Uma pessoa, três versões
- Núcleo
- Suporte
- Recepção Você aqui éum cliente. Interessam nome, documento, contato, endereço e convênio.Não enxerga: o seu prontuário.
- Passa para o próximo contexto: Paciente
chegou - Atendimento Você aqui éum paciente. Interessam sintomas, histórico, alergias, exames e receitas.Não enxerga: o seu cartão de crédito.
- Passa para o próximo contexto: Procedimento
realizado - Financeiro Você aqui éum cliente de novo. Interessam CPF, convênio, forma de pagamento e faturas.Não enxerga: o seu diagnóstico.
Etapa 03
Modelar o domínio
Cada regra do negócio precisa de um lugar no código e de alguém que a proteja.
Dentro de cada contexto, desenho as peças que guardam as regras. O DDD dá nome a quatro delas.
Entidade é o que tem identidade própria. O paciente troca de endereço e de convênio e continua sendo o mesmo paciente.
Objeto de valor é uma descrição que não muda depois de criada. Se a rua ou o número de um endereço mudam, já é outro endereço. O seu endereço não muda. Quem muda é você.
Agregado reúne o que precisa mudar junto e protege as regras que nunca podem ser quebradas. O limite dele é o de uma transação: tudo o que está dentro é salvo de uma vez, ou nada é salvo. Toda alteração passa pela raiz do agregado, que recusa qualquer pedido capaz de deixar o negócio num estado inválido.
Evento de domínio é o aviso de que algo relevante aconteceu, escrito no passado. É assim que o financeiro descobre que a consulta terminou sem abrir o prontuário.
(Modelo do domínio)Exemplo · contexto Atendimento
Uma consulta, quatro peças
- Agregado · raiz Consulta O que precisa mudar junto, sem nunca ficar pela metade? Regras que protege Receita só sai com diagnóstico registrado. Consulta encerrada não se edita. Correção entra como complemento assinado.
- Entidade Paciente Quem continua sendo a mesma pessoa, mesmo quando tudo muda? Identidade Cadastro nº 10577. Endereço, telefone, convênio e nome social podem mudar. O número fica.
- Entidade Prontuário O que continua sendo o mesmo enquanto a história cresce? Identidade e estado Prontuário nº 48213. Recebe sintomas, diagnósticos, prescrições e exames a cada atendimento. Anotação médica nunca é apagada. Ela é retificada ou complementada, com data e profissional identificado.
- Evento de domínio Procedimento realizado O que aconteceu que o resto do negócio precisa saber? Quem reage Financeiro gera a cobrança do convênio. Farmácia separa os itens da receita.
Etapa 04
Orquestrar a saga
Coloco o negócio inteiro numa parede, em ordem cronológica.
A técnica se chama Event Storming. Reunimos as pessoas certas e escrevemos, em notas adesivas, tudo o que acontece no negócio, sempre no passado: pedido confirmado, pagamento recusado, entrega reagendada. Depois organizamos esses eventos numa linha do tempo e perguntamos o que dispara cada um, quem é responsável e quais regras se aplicam.
Em poucas horas aparece um retrato do processo que ninguém tinha visto inteiro. Os pontos de dúvida ou de conflito ganham uma nota de outra cor. São esses pontos que viram as primeiras conversas difíceis e, quase sempre, as decisões mais importantes do projeto.
Quando o processo é mais narrativo, uso Domain Storytelling: alguém do time conta como o trabalho acontece e eu desenho a história com atores, objetos e atividades, até que todos concordem que é aquilo mesmo.
(01) A compra
- Passo 01Cliente revisa o carrinho
- Passo 02Escolhe o frete e a forma de pagamento
- Passo 03Clica em “Finalizar compra”
- Evento de domínioPedido realizado
- Saga do pedidoOrquestra as etapas seguintes
(02) A saga, quando tudo dá certo
- Evento de domínioPagamento efetuado
- Evento de domínioEstoque confirmado
- Evento de domínioLogística de entrega notificada
- Evento de domínioNota fiscal emitida
- Evento de domínioPedido confirmado
(03) A saga, quando o pedido não pode seguir
- FalhaPedido não pode seguir
- CompensaçãoNota fiscal cancelada
- CompensaçãoEntrega cancelada
- CompensaçãoEstoque liberado
- CompensaçãoPagamento estornado
Passo Evento de domínio Saga Falha Compensação
Etapa 05
Separar o essencial
Com o mapa na mão, a pergunta passa a ser onde investir.
Divido o negócio em subdomínios e classifico cada um. O núcleo é o que diferencia a sua empresa da concorrência e merece o melhor do orçamento e da atenção. Os subdomínios de suporte são necessários e específicos do seu negócio, mas não são o motivo pelo qual os clientes escolhem você. Os genéricos são problemas que todo mundo tem, como login, pagamento e envio de e-mail.
Essa classificação muda o orçamento do projeto. Problema genérico se resolve com uma ferramenta pronta e confiável. Suporte pede uma solução simples e bem feita. Código sob medida e cuidado de artesão ficam com o núcleo.
Nem tudo no seu negócio merece código sob medida. O que merece precisa ser impecável.
Etapa 06
Decidir e registrar
Só depois de entender o negócio é que escolho a tecnologia.
Defino com você os atributos de qualidade que importam para o produto: quantas pessoas ao mesmo tempo, quanto tempo pode ficar fora do ar, quanto pode custar por mês, quão rápido precisa responder. Cada atributo vira um cenário concreto, e é contra esses cenários que comparo as alternativas.
Em um e-commerce, disponibilidade é faturamento: na Black Friday, cada minuto fora do ar é venda que vai para o concorrente. O cenário passa a ser “o carrinho e o pagamento continuam funcionando mesmo se as recomendações ou o cálculo de frete caírem”. Em um sistema de agendamento, o que não pode falhar é a consistência: duas pessoas nunca ficam com o mesmo horário. Em um painel interno usado por dez pessoas, o atributo que mais pesa pode ser o custo baixo por mês. Cada produto tem as suas prioridades, e a arquitetura certa é a que atende às prioridades dele.
Separo as decisões fáceis de reverter das difíceis. As primeiras eu tomo rápido. As segundas ganham tempo, protótipo e um registro escrito, o ADR (registro de decisão de arquitetura), com o contexto, as opções avaliadas e o motivo da escolha. Quem chegar ao projeto daqui a dois anos vai entender por que ele é do jeito que é.
O resultado é o blueprint da aplicação: diagramas do panorama geral até os componentes, a estrutura de dados, as integrações e as diretrizes para o produto crescer.
Etapa 07
Construir e evoluir
O modelo do negócio vive dentro do código.
Os nomes das classes, das funções e das tabelas são os mesmos que o seu time usa no dia a dia. As regras importantes ficam juntas, protegidas e cobertas por testes escritos na linguagem do negócio. Quando alguém pergunta “o que acontece se o pagamento for recusado?”, a resposta está num lugar só.
E como o negócio muda, o modelo também muda. Depois do lançamento, volto ao mapa sempre que surge uma regra nova ou uma fronteira começa a incomodar. É assim que o produto continua fácil de mudar no segundo ano, e não só no primeiro mês.
(O que fica)
Uma boa arquitetura quase nunca aparece na tela. Aparece no produto que continua de pé enquanto o seu negócio cresce.
(Caixa de ferramentas) Técnicas que uso
(09)Nenhuma delas é ritual. Escolho a técnica pelo tamanho do problema e por quem está na sala, e cada uma aparece em uma etapa deste ensaio.
Frente 014 técnicas
Entender o negócio
Como o trabalho acontece de verdade
-
Entrevistas com especialistas
Conversas com quem opera o negócio, para levantar vocabulário, regras e exceções antes de qualquer desenho.
Entrevistas com especialistas: veja na Etapa 01 · Escutar antes de desenhar -
Linguagem ubíqua
Um glossário vivo, compartilhado entre o negócio e o código, revisado a cada etapa.
Linguagem ubíqua: veja na Etapa 01 · Escutar antes de desenhar -
Event Storming
Workshop colaborativo que monta a linha do tempo do negócio com eventos de domínio e revela os pontos de conflito.
Event Storming: veja na Etapa 04 · Orquestrar a saga -
Domain Storytelling
O time conta como o trabalho acontece e a história vira um diagrama de atores, objetos e atividades.
Domain Storytelling: veja na Etapa 04 · Orquestrar a saga
Frente 023 técnicas
Desenhar o sistema
Onde cada regra mora
-
Contextos delimitados e mapa de contextos
Fronteiras claras entre as partes do sistema e contratos explícitos para o que atravessa cada uma.
Contextos delimitados e mapa de contextos: veja na Etapa 02 · Traçar fronteiras -
Agregados, entidades e objetos de valor
Modelagem tática que dá a cada regra do negócio um lugar no código e uma única porta de entrada para alterá-la.
Agregados, entidades e objetos de valor: veja na Etapa 03 · Modelar o domínio -
Mapa de subdomínios
Classificação em núcleo, suporte e genérico, para decidir o que construir sob medida e o que adotar pronto.
Mapa de subdomínios: veja na Etapa 05 · Separar o essencial
Frente 032 técnicas
Decidir com critério
Por que é assim, e não de outro jeito
-
Cenários de atributos de qualidade
Desempenho, disponibilidade, custo e segurança traduzidos em situações concretas que a solução precisa aguentar.
Cenários de atributos de qualidade: veja na Etapa 06 · Decidir e registrar -
ADRs
Registros de decisão de arquitetura: cada escolha importante documentada com o contexto, as opções avaliadas e o motivo.
ADRs: veja na Etapa 06 · Decidir e registrar