Estoy seguro de que hay un nombre para este antipatrón en alguna parte; Sin embargo, no estoy lo suficientemente familiarizado con la literatura antipatrón como para saberlo.
Considere el siguiente escenario:
or0
es una función miembro en una clase. Para bien o para mal, depende en gran medida de las variables de los miembros de la clase. El Programador A aparece y necesita funcionalidades como, or0
pero en lugar de llamar or0
, el Programador A copia y renombra a toda la clase. Supongo que no llama or0
porque, como digo, depende en gran medida de las variables miembro para su funcionalidad. O tal vez es un programador junior y no sabe cómo llamarlo desde otro código. Así que ahora tenemos or0
y c0
(c para copiar). No puedo culpar por completo al Programador A por este enfoque: todos tenemos plazos ajustados y pirateamos el código para realizar el trabajo.
Varios programadores mantienen or0
así que ahora es la versión orN
. c0
Ahora es la versión cN
. Desafortunadamente, la mayoría de los programadores que mantuvieron la clase contenida or0
parecían desconocer por completo, lo cual c0
es uno de los argumentos más fuertes que puedo pensar sobre la sabiduría del principio DRY. Y también puede haber habido un mantenimiento independiente del código en c
. De cualquier manera parece que or0
y c0
se mantuvieron independientes el uno del otro. Y, alegría y felicidad, está ocurriendo un error en el cN
que no ocurre orN
.
Entonces tengo algunas preguntas:
1.) ¿Hay un nombre para este antipatrón? He visto que esto sucede tan a menudo que me resulta difícil creer que este no sea un antipatrón con nombre.
2.) Puedo ver algunas alternativas:
a.) Arreglo orN
para tomar un parámetro que especifica los valores de todas las variables miembro que necesita. Luego modifique cN
para llamar orN
con todos los parámetros necesarios pasados.
b.) Intente portar manualmente arreglos de orN
a cN
. (Eso sí, no quiero hacer esto, pero es una posibilidad realista).
c.) Vuelva orN
a cN
copiar a - de nuevo, qué asco, pero lo enumero por completo.
d.) Trate de averiguar dónde cN
está roto y luego repárelo independientemente orN
.
La alternativa a parece ser la mejor solución a largo plazo, pero dudo que el cliente me permita implementarla. Nunca tiempo o dinero para arreglar las cosas bien, sino siempre tiempo y dinero para reparar el mismo problema 40 o 50 veces, ¿verdad?
¿Alguien puede sugerir otros enfoques que no haya considerado?