Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Sobre programar para interfaces.

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.

3 respostas

Não sou professor, porém acredito que se a classe está simples, e ainda não foi solicitado nenhuma mudança, então deixa do jeito que está (a não ser que tenha bugs), caso seja necessário e surja uma outra mudança semelhante, ai é feito a seguinte analise, verifica se é interessante criar uma interface ou uma classe abstrata para pegar as particularidades dos códigos, aplicando então os princípios mencionados.

solução!

Oi Bruno,

Excelente pergunta! E só a pergunta já me deixa bem claro que você realmente já sabe tudo o que precisa sobre design de classes! :)

A resposta genérica: Você está certíssimo. Toda decisão de design deve levar o contexto em consideração. E você também nunca vai acertar de primeira, você aprende ao longo do tempo, e refatora seu código de acordo com as novas necessidades.

Nas aulas, eu optei por exemplos menores. Um exemplo maior só dificultaria o aprendizado. Discuti acoplamento, coesão, encapsulamento, etc e tal, e mostrei exemplos de como diminuir esses problemas. No exemplo do acoplamento, por exemplo, usei um Observer. O Observer resolve o problema do acoplamento, mas traz um novo problema: a complexidade. Você precisa então balancear entre um e outro. E como fazer isso? Depende do problema.

Não há uma resposta certa para quando criar uma interface e abusar mais de flexibilidade. Depende do contexto. E você vai errar e acertar. O ponto é você perceber quando errou, e aí refatorar.

Faço uma discussão parecida quando falo de padrões de projeto. É sempre uma troca!

Faz sentido?

Um abraço!

faz sim.