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
UUIDEmailMoney- 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.