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.

Use os controles do diagrama para comparar as composições e seguir as relações.
Composição em produçã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.

Composição no teste

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.