Eu tenho lido " Código Limpo ", de Robert Martin, para se tornar um programador melhor. Embora nada até agora tenha sido realmente inovador, isso me fez pensar de maneira diferente sobre a maneira como desenvolvo aplicativos e escrevo código.
Há uma parte do livro com a qual eu não apenas não concordo, mas não faz sentido para mim, especificamente em relação às convenções de nomenclatura de interfaces. Aqui está o texto, extraído diretamente do livro. Eu atrevi o aspecto disso, acho confuso e gostaria de esclarecimentos.
Eu prefiro deixar as interfaces sem adornos. O eu precedente, tão comum nos maquinários herdados de hoje, é uma distração na melhor das hipóteses e muita informação na pior das hipóteses. Não quero que meus usuários saibam que estou entregando uma interface a eles .
Talvez seja porque sou apenas um estudante ou talvez nunca tenha feito nenhuma programação profissional ou em equipe, mas gostaria que o usuário soubesse que é uma interface. Há uma grande diferença entre implementar uma interface e estender uma classe.
Portanto, minha pergunta se resume a: "Por que devemos esconder o fato de que parte do código está esperando uma interface?"
Editar
Em resposta a uma resposta:
Se o seu tipo é uma interface ou uma classe é da sua conta, não da conta de alguém usando seu código. Portanto, você não deve vazar detalhes do seu código neste código de terceiros.
Por que não devo "vazar" os detalhes sobre se um determinado tipo é uma interface ou uma classe para código de terceiros? Não é importante para o desenvolvedor de terceiros usar meu código saber se eles estão implementando uma interface ou estendendo uma classe? As diferenças simplesmente não são tão importantes quanto as estou pensando?
to know whether they will be implementing an interface or extending a class
: sim, mas a maioria dos usuários do seu código irá chamá-lo, não implementá-lo ou estendê-lo, e eles realmente não poderiam se importar com o que é.