Passei muito tempo lendo livros diferentes sobre "bom design", "padrões de design" etc. Eu sou um grande fã da abordagem SOLID e sempre que preciso escrever um código simples, penso em o futuro. Portanto, se implementar um novo recurso ou uma correção de bug exigir apenas a adição de três linhas de código como esta:
if(xxx) {
doSomething();
}
Isso não significa que farei dessa maneira. Se eu sinto que esse pedaço de código provavelmente se tornará maior no futuro próximo, pensarei em adicionar abstrações, mover essa funcionalidade para outro lugar e assim por diante. O objetivo que estou buscando é manter a complexidade média como antes das minhas alterações.
Acredito que, do ponto de vista do código, é uma boa idéia - meu código nunca é longo o suficiente e é muito fácil entender os significados para diferentes entidades, como classes, métodos e relações entre classes e objetos.
O problema é que leva muito tempo, e muitas vezes sinto que seria melhor se eu apenas implementasse esse recurso "como está". Trata-se de "três linhas de código" versus "nova interface + duas classes para implementar essa interface".
Do ponto de vista do produto (quando estamos falando sobre o resultado ), as coisas que faço são completamente sem sentido. Sei que, se vamos trabalhar na próxima versão, ter um bom código é realmente ótimo. Por outro lado, o tempo que você gastou para tornar seu código "bom" pode ter sido gasto na implementação de alguns recursos úteis.
Muitas vezes me sinto muito insatisfeito com meus resultados - um código bom que só pode fazer A é pior que um código ruim que pode fazer A, B, C e D.
É provável que essa abordagem resulte em um ganho líquido positivo para um projeto de software ou é uma perda de tempo?