Shared Kernel e contratos

Quais elementos vale a pena compartilhar entre repositórios e serviços, e como evitar que o que é compartilhado se torne uma fonte de acoplamento.

O que é um Shared Kernel?

É um conjunto pequeno de conceitos compartilhados entre várias partes do sistema.

Pode incluir:

  • value objects bastante estáveis
  • contratos técnicos mínimos
  • utilitários realmente transversais
  • tipos comuns

O que vale a pena compartilhar

  • UUID
  • Email
  • Money
  • Interfaces técnicas bastante estáveis
  • Certos eventos ou contratos bem governados

O que não vale a pena compartilhar em excesso

  • Modelos completos do domínio
  • DTOs que mudam com frequência
  • Lógica de negócio
  • Estruturas que obriguem todos a versionar ao mesmo tempo

Risco principal

Se o shared kernel cresce sem controle, ele se torna uma dependência global que:

  • acopla equipes
  • obriga a coordenar releases
  • dificulta a evolução independente

Contratos explícitos

Além do shared kernel, o importante é que existam contratos claros entre os componentes:

  • APIs
  • eventos
  • interfaces
  • schemas

Compartilhar não deveria significar misturar contextos.

Resumo

Um shared kernel pequeno pode ajudar. Um grande costuma recriar o problema que você tentava evitar: o acoplamento.