TheCodeNaked

Interface: Se você não usa tudo, o contrato está quebrado (Copy)

"Uma interface é um contrato. E contrato que não se cumpre, está quebrado."

Introdução

Muito se fala que devemos "programar para a interface, e não para a implementação". O problema não está apenas na frase, mas na forma como ela é ensinada, repetida, distorcida e aplicada. É uma frase mal formulada, gramaticalmente ambígua e conceitualmente frágil.


O problema da interface genérica

Quando você declara uma variável como IExportador, mas só chama ExportarParaPDF, você está dizendo:

"Preciso de todo esse contrato, mas na verdade, só uso um pedaço."

Se você chama apenas 1 dos 5 métodos da interface, então você não está cumprindo o contrato, está apenas usando um ponto de acesso formal para esconder uma dependência real e direta.

Uma interface é útil quando todos os seus métodos fazem sentido em todos os lugares onde ela é consumida. Caso contrário, é um artefato burocrático.


A falsa obrigação de implementar

A maioria acredita que o "contrato" da interface existe para obrigar o implementador a fazer tudo. Mas a obrigação real deveria ser o inverso:

O consumidor da interface deveria usar tudo que ela oferece.

Se não usar, o contrato está quebrado. O acoplamento é real. A abstração é falsa.


A metáfora gramatical

Quando dizemos "programe para a interface", quem programa? E quem implementa?

A frase tem um sujeito oculto e um objeto ambíguo. Parece que existem dois mundos separados:

  • Um mundo onde tudo é ideal, onde a interface vive.
  • E outro mundo subterrâneo onde os plebeus escrevem implementações reais.

Isso leva ao culto da interface como entidade autossuficiente, o que é um erro.


O paradoxo da classe pequena

Se você tem uma classe com só dois métodos, por que criar uma interface? Para permitir trocá-la? Por quê? Se só há um consumidor e uma implementação, você está adicionando camadas e abstrações que nunca trarão retorno.

O argumento é: "e se um dia precisar trocar?" Mas a resposta correta é: "e se nunca precisar?" Porque a conta de manter a interface já chegou.


Interface boa tem uso pleno

  • Se você consome 100% do que a interface expõe em todos os contextos.
  • Se você tem múltiplas implementações reais e distintas.
  • Se você compartilha a interface entre várias partes do sistema.

Aí sim, a interface faz sentido. Fora isso, é enfeite.


Conclusão

Uma interface não é apenas uma promessa de comportamento. É uma declaração de dependência mútua, onde quem consome espera tudo, e quem implementa entrega tudo.

Se você usa só uma parte do contrato, você está acoplado a um todo desnecessário. Está enganando o compilador. Está escrevendo código que parece flexível, mas é só barulhento.

Se você não usa tudo, o contrato está quebrado. E ninguém deveria assinar um contrato para usar só um parágrafo.
Sobre o autor

TheCodeNaked

No TheCodeNaked, programar é consequência, não ponto de partida. Antes do código, vem a dúvida, a análise, o contexto. Não seguimos fórmulas — questionamos. Criar software é pensar com clareza. O resto é só digitação.

TheCodeNaked

Criar com clareza. Codificar com intenção.

TheCodeNaked

Ótimo! Você se inscreveu com sucesso.

Bem-vindo de volta! Você acessou com sucesso.

Você se inscreveu com sucesso o TheCodeNaked.

Sucesso! Verifique seu e-mail para acessar com o link mágico.

As suas informações de faturamento foram atualizadas.

Seu pagamento não foi atualizado