Diagrama de inversão de dependência
Mapa da direção de dependência no código e da execução em produção.
Inversão de dependência no checkout, em duas visões: composição em produção e composição no teste. A dependência de código aponta para a política; a chamada em tempo de execução continua chegando ao adaptador concreto escolhido na composição.
main (ponto de composição) ──injeta implementação──→ checkout.Service (regra de negócio) [consumidor]
checkout.Service ──define e usa──→ OrderSaver (interface mínima) [contrato]
PostgresRepository (implementação real) ──implementa──→ OrderSaver
main ──cria em produção──→ PostgresRepository
O main escolhe PostgreSQL; checkout conhece somente o contrato que ele próprio necessita.
checkout.Service (regra de negócio) [consumidor] ──define e usa──→ OrderSaver (interface mínima) [contrato]
fakeOrderSaver (implementação de teste) ──implementa no teste──→ OrderSaver
O teste troca apenas a implementação, sem mudar a regra de negócio.