Pular para o conteúdo principal

Highlighted Core

Descrição​

O Highlighted Core torna o Core Domain fácil de encontrar dentro de um modelo grande, sem alterar a estrutura do código. Ele combina dois recursos leves: um documento de destilação e marcações explícitas no próprio modelo.

O documento de destilação é uma descrição muito curta (de três a sete páginas, no máximo) com os conceitos centrais e as interações entre eles, escrito de forma que qualquer membro da equipe possa lê-lo. As marcações, por sua vez, sinalizam no repositório quais módulos ou classes pertencem ao core, por exemplo com anotações, convenções de nomes ou destaque nos diagramas.

A vantagem é a baixa intrusão: o núcleo ganha visibilidade imediata sem a necessidade de refatorar pacotes. Quando o custo de separar fisicamente é alto, esse é o passo inicial, e a separação estrutural pode vir depois com o Segregated Core.

Problemas que resolve​

  • Desenvolvedores que não sabem quais partes do código são centrais e quais são de suporte.
  • Mudanças feitas no core sem o cuidado extra que ele exige.
  • O core diluído entre muitos elementos de aparência igual.
  • Dificuldade de explicar o essencial do modelo a quem chega ao projeto.

Quando usar​

  • Quando o core foi identificado, mas reestruturar o código agora é caro ou arriscado.
  • Quando a equipe é grande ou rotativa e precisa de orientação rápida.
  • Como primeiro passo, antes de decidir por uma separação estrutural.

Quando evitar​

  • Quando o modelo é pequeno e o core é óbvio para todos.
  • Quando o documento de destilação não será mantido, pois ele se descola da realidade rapidamente.
  • Quando o acoplamento entre core e o restante é o verdadeiro problema; marcar não resolve a dependência, e o caso pede um Segregated Core.

Trade-offs​

GanhoCusto / Risco
Visibilidade do core com pouco esforçoNão reduz o acoplamento entre core e o resto
Sem refatoração estruturalMarcações e documento podem ficar desatualizados
Orienta novos membros e revisões de códigoExige disciplina de manter o destaque consistente
Compatível com qualquer estrutura de códigoPode dar falsa sensação de que o problema está resolvido
  • Manutenção: o documento deve ser revisado sempre que o core mudar; ele só é útil se refletir o modelo atual.
  • Formato: o importante é a visibilidade, por isso pode ser um arquivo no repositório, uma seção de wiki ou uma anotação no código.
  • Evolução: costuma ser a etapa que antecede uma separação estrutural.

Diagrama​

O modelo permanece inteiro, mas o documento de destilação e as marcações apontam quais conceitos pertencem ao core.

Exemplo​

Uma seguradora tem um grande módulo de apólices em que a precificação de risco é o core, mas as classes estão misturadas com cadastro, cobrança e relatórios. Refatorar tudo agora atrasaria o roadmap em meses.

A equipe escreve um documento de duas páginas na raiz do repositório, CORE.md, listando os conceitos centrais (RiskProfile, PremiumCalculator, UnderwritingRule) e como interagem. Essas classes recebem uma anotação @CoreDomain, o diagrama principal as destaca em cor e as revisões de código nelas exigem um segundo revisor sênior.

Padrões relacionados​

  • Core Domain — o conceito que está sendo destacado.
  • Domain Vision Statement — descreve o valor do core, enquanto este padrão aponta onde ele está.
  • Segregated Core — alternativa estrutural, mais forte e mais cara.
  • Abstract Core — outra forma de resumir o core, com um módulo de conceitos abstratos em vez de documento.
  • Module — módulos são a unidade natural a destacar.
  • Context Map — também funciona como um destaque de alto nível, entre contextos.

Referência​