Ideia

Um código consultável é um código cujas exceções carregam regras de negócio, não um código limpo

Info

Escrito originalmente em francês. Traduzido por IA — o sentido foi preservado, não a prosa.

Ideia principal

Uma exceção chamada ElementAnnuléNonModifiable não é uma mensagem de erro: é uma regra de negócio escrita em código, legível por um agente de suporte que não programa. Uma exceção chamada InvalidStateException diz a mesma coisa ao processador e nada a mais ninguém. É essa distância, e não a qualidade técnica do repositório, que decide se uma pergunta de produto pode encontrar ali a sua resposta.

A condição se estende a todo o material: entidades que carregam os nomes usados pelos usuários, ações cujo título dá para ler, eventos que contam o que aconteceu, políticas que tornam visíveis as reações em cadeia, módulos cuja estrutura é previsível. Um repositório em que os conceitos do domínio ficam escondidos atrás de nomes técnicos e em que as regras estão espalhadas continua opaco, por mais cuidado que se tenha tido com o recorte ou com a cobertura de testes.

A exigência é antiga — as abordagens de design orientadas pelo domínio a sustentam há muito tempo — e não foi criada pela chegada dos assistentes. Um desenvolvedor que assume um repositório assim paga a mesma tradução permanente entre a necessidade de negócio e a mecânica de software; cada evolução exige reconstruir essa ligação, cada busca por uma regra custa mais caro. O que a possibilidade de consultar o código muda é que esse defeito se torna mensurável de fora do time técnico: ele não se traduz mais em lentidão difusa, mas em respostas que ninguém consegue obter.

Por que isso importa

Isso desloca o critério que aplicamos antes de instalar um dispositivo de consulta. A pergunta a fazer a um repositório não é "ele é bem cuidado?", e sim "o vocabulário do domínio está escrito nele?" — duas propriedades que muitas vezes andam juntas e não têm ligação necessária.

Isso também dá um argumento não técnico a um investimento que só tinha um. Renomear conceitos para a linguagem do negócio deixa de ser uma preferência de artesão a partir do momento em que o suporte, a pré-venda e o product management dependem disso para obter respostas.

Nuances e limites

A uniformidade não existe: um mesmo repositório fala a linguagem do negócio no módulo de faturamento, escrito vinte anos antes por gente que conhecia o domínio, e fica mudo na camada de integração. A condição se verifica zona por zona, não no repositório inteiro.

O vocabulário inscrito no código, além disso, tem data. Um nome de entidade que sobreviveu a três reposicionamentos conta um negócio que não se pratica mais, e a própria legibilidade dele o torna enganoso.

Por fim, um nome de negócio correto pode cobrir uma regra errada. Uma exceção expressar uma regra a torna legível, não exata: o que se torna consultável é o código, não o produto desejado.

Questões em aberto

  • Quem decide o vocabulário quando os usuários chamam um objeto de um jeito diferente do código, e os dois usos têm quem os defenda na empresa?
  • Como medir, antes de começar o trabalho, a distância entre o vocabulário de um repositório e o do domínio?