Sono sicuro che ci sia un nome per questo anti-pattern da qualche parte; tuttavia non ho abbastanza familiarità con la letteratura anti-pattern per saperlo.
Considera il seguente scenario:
or0
è una funzione membro in una classe. Nel bene e nel male, dipende fortemente dalle variabili dei membri della classe. Il programmatore A arriva e necessita di funzionalità come or0
ma piuttosto che chiamare or0
, il programmatore A copia e rinomina l'intera classe. Immagino che non chiami or0
perché, come ho detto, dipende fortemente dalle variabili membro per la sua funzionalità. O forse è una programmatrice junior e non sa come chiamarla da un altro codice. Quindi ora abbiamo or0
e c0
(c per copia). Non posso criticare completamente il programmatore A per questo approccio: siamo tutti sotto scadenze strette e hackeriamo il codice per completare il lavoro.
Diversi programmatori mantengono or0
quindi è ora la versione orN
. c0
è ora la versione cN
. Sfortunatamente la maggior parte dei programmatori che hanno mantenuto la classe contenente or0
sembravano completamente inconsapevoli di c0
- qual è uno degli argomenti più forti a cui posso pensare per la saggezza del principio DRY. E potrebbe anche esserci stata una manutenzione indipendente del codice in c
. Ad ogni modo sembra che or0
e c0
sono stati mantenuti indipendenti l'uno dall'altro. E, gioia e felicità, si sta verificando un errore in cN
cui non si verifica orN
.
Quindi ho alcune domande:
1.) C'è un nome per questo anti-pattern? L'ho visto accadere così spesso che troverei difficile credere che questo non sia un anti-modello chiamato.
2.) Vedo alcune alternative:
a.) Risolto orN
il problema per prendere un parametro che specifica i valori di tutte le variabili membro di cui ha bisogno. Quindi modificare cN
per chiamare orN
con tutti i parametri necessari passati.
b.) Prova a trasferire manualmente le correzioni da orN
a cN
. (Intendiamoci, non voglio farlo, ma è una possibilità realistica.)
c.) Ricopia orN
per: cN
nuovamente, schifo ma lo elencherò per completezza.
d.) Prova a capire dove cN
è rotto e poi riparalo indipendentemente da orN
.
L'alternativa a sembra la migliore soluzione a lungo termine ma dubito che il cliente mi lascerà implementare. Mai tempo o denaro per sistemare le cose nel modo giusto, ma sempre tempo e denaro per riparare lo stesso problema 40 o 50 volte, giusto?
Qualcuno può suggerire altri approcci che potrei non aver preso in considerazione?