Tenho certeza de que há um nome para esse anti-padrão em algum lugar; no entanto, não estou familiarizado o suficiente com a literatura antipadrão para conhecê-lo.
Considere o seguinte cenário:
or0
é uma função de membro em uma classe. Para o melhor ou para o pior, depende muito das variáveis dos membros da classe. O Programador A aparece e precisa de funcionalidades como, em or0
vez de chamar or0
, o Programador A copia e renomeia a classe inteira. Suponho que ela não ligue or0
porque, como eu digo, depende muito das variáveis de membro para sua funcionalidade. Ou talvez ela seja uma programadora júnior e não saiba como chamá-la de outro código. Então agora temos or0
e c0
(c para cópia). Não posso culpar completamente o programador A por essa abordagem - todos temos prazos apertados e hackeamos o código para concluir o trabalho.
Vários programadores mantêm or0
a versão agora orN
. c0
agora é a versão cN
. Infelizmente, a maioria dos programadores que mantinham a classe contendo or0
parecia desconhecer completamente - qual c0
é um dos argumentos mais fortes que posso pensar pela sabedoria do princípio DRY. E também pode ter havido manutenção independente do código em c
. De qualquer forma, parece que or0
e c0
foram mantidas independentes um do outro. E, alegria e felicidade, um erro está ocorrendo no cN
que não ocorre orN
.
Então, eu tenho algumas perguntas:
1.) Existe um nome para esse anti-padrão? Eu já vi isso acontecer com tanta frequência que acho difícil acreditar que esse não seja um anti-padrão nomeado.
2.) Eu posso ver algumas alternativas:
a.) Corrija orN
para obter um parâmetro que especifique os valores de todas as variáveis de membro necessárias. Em seguida, modifique cN
para chamar orN
com todos os parâmetros necessários passados.
b.) Tente portar manualmente as correções de orN
para cN
. (Lembre-se de que não quero fazer isso, mas é uma possibilidade realista.)
c.) Recopie orN
para - cN
novamente, eca, mas eu listo por uma questão de completude.
d.) Tente descobrir onde cN
está quebrado e, em seguida, repare-o independentemente orN
.
A alternativa a parece ser a melhor correção a longo prazo, mas duvido que o cliente me permita implementá-la. Nunca tempo ou dinheiro para consertar as coisas direito, mas sempre tempo e dinheiro para consertar o mesmo problema 40 ou 50 vezes, certo?
Alguém pode sugerir outras abordagens que eu talvez não tenha considerado?