Gostaria de levantar alguns pontos e saber a opinião do instrutor.
1 - Sobre quando no seu sistema você tem interfaces para todos os lados que tem sempre apenas uma implementação, o que resulta em sempre o dobro de arquivos e alterações em cascatas pois você teve que alterar a interface feita por padrão, pois vejo muita gente criar interface só por criar não pensando em abstrair os problemas.
2 - projetar uma interface estável de primeira acho bem difícil de você prever o mundo todo, por consequência nunca são estáveis e não existe o desacoplamento e sim alterações em vários arquivos.
3 - baseado em tudo isso no mundo real me parece que a hora certa de inserir uma interface eh por refatoração e quando você necessita de mais de um comportamento como no exemplo do video quando você teve mais de um frete ou mais de uma tabela ou seja o código pede uma abstração e você extrai interface da sua classe concreta e abstrai ao mesmo tempo mantendo o código simples, se não tiver uma segunda implementação não tem 2 arquivos, seguindo o "keep simple", o que acha dessa abordagem?
Finalizando nos livros do uncle bob para min fica claro que ele incentiva você a criar interfaces de cara para tudo como se você fosse conseguir uma interface estável rápido e ao pensar de primeira.
Mas no mundo real já me vi e muitas outras pessoas criarem interfaces logo de cara e sempre ter alterações em cascata por mudanças constantes nas interfaces baseados nas mudanças de negocio ou por simplesmente não imaginarem o que nescessitavao ferindo o OCP, mas se sentindo bem pois estavam programando para interfaces e pior ainda ferindo o DRY pois alterando as interfaces que tem apenas uma implementação estou me repetindo varias vezes.
No curso não ficou claro qual deveria ser o momento de inserir as interfaces logo de cara ou por refatoração escutando a necessidades das classes ,design emergente e tal, gostaria de saber qual a opinião do professor sobre a hora de aplicar as interfaces no código?
Obrigado.