18.4. Separated Interface
Interface em um pacote, implementação em outro: inverte a dependência.
Resumo
- Define a interface em um pacote e a implementação em outro.
- O cliente depende só da interface; a implementação depende do pacote do cliente. Inverte a dependência.
- Ex.: domínio define
RepositorioPedidos; mapeamento implementa. Domínio não depende do banco. - Instanciar a implementação: factory separada, Plugin ou injeção.
- Use para quebrar dependências entre camadas ou módulos. Não crie interface para tudo sem motivo.
Perguntas-chave
responda de cabeça, depois abraOnde fica a interface no Separated Interface?
No pacote do cliente (ou em um pacote próprio), separado da implementação.
Como o cliente obtém a implementação sem depender dela?
Via factory separada, Plugin ou injeção de dependência.
Devo criar interface para toda classe?
Não. Use quando há uma dependência que precisa ser quebrada.
Exercícios de fixação
0/5 respondidas1.
O pacote
dominio declara interface RepositorioPedidos; o pacote infra contém RepositorioPedidosSql implements RepositorioPedidos. Qual padrão?2.
Nesse arranjo, qual pacote depende de qual?
3.
Se o domínio não pode depender de
infra, como obtém a implementação?4.
Quando Fowler não recomenda Separated Interface?
5.
Separated Interface é a base técnica de qual princípio conhecido?