Ich bin sicher, dass es irgendwo einen Namen für dieses Anti-Muster gibt; Ich bin jedoch nicht genug mit der Anti-Muster-Literatur vertraut, um sie zu kennen.
Stellen Sie sich das folgende Szenario vor:
or0
ist eine Mitgliedsfunktion in einer Klasse. Ob gut oder schlecht, es hängt stark von Variablen der Klassenmitglieder ab. Programmierer A kommt und benötigt Funktionen wie, or0
aber anstatt aufzurufen or0
, kopiert Programmierer A die gesamte Klasse und benennt sie um. Ich vermute, dass sie nicht anruft, or0
weil es, wie gesagt, für seine Funktionalität stark von Mitgliedsvariablen abhängt. Oder vielleicht ist sie eine Junior-Programmiererin und weiß nicht, wie sie es von einem anderen Code aus aufrufen soll. Also jetzt haben wir or0
und c0
(c für Kopie). Ich kann Programmierer A für diesen Ansatz nicht vollständig bemängeln - wir alle haben enge Fristen und hacken Code, um die Arbeit zu erledigen.
Mehrere Programmierer warten, or0
so dass es jetzt Version ist orN
. c0
ist jetzt Version cN
. Leider or0
schienen sich die meisten Programmierer, die die Klasse enthielten , überhaupt nicht bewusst zu c0
sein - was eines der stärksten Argumente ist, die ich mir für die Weisheit des DRY-Prinzips vorstellen kann. Möglicherweise wurde der Code auch unabhängig gepflegt c
. So oder so scheint es, dass or0
und c0
unabhängig voneinander gehalten wurden. Und, Freude und Glück, es tritt ein Fehler auf cN
, der nicht auftritt orN
.
Ich habe also ein paar Fragen:
1.) Gibt es einen Namen für dieses Anti-Muster? Ich habe das so oft gesehen, dass es mir schwer fällt zu glauben, dass dies kein benanntes Anti-Muster ist.
2.) Ich sehe einige Alternativen:
a.) Fix orN
, um einen Parameter zu übernehmen, der die Werte aller benötigten Mitgliedsvariablen angibt. Ändern Sie dann cN
, um orN
alle erforderlichen Parameter aufzurufen, die übergeben wurden.
b.) Versuchen Sie, Fixes manuell von orN
bis zu portieren cN
. (Wohlgemerkt, ich möchte das nicht tun, aber es ist eine realistische Möglichkeit.)
c.) Wiederholen, orN
um noch cN
einmal, yuck, aber ich liste es der Vollständigkeit halber auf.
d.) Versuchen Sie herauszufinden, wo ein cN
Defekt vorliegt, und reparieren Sie ihn dann unabhängig davon orN
.
Alternative a scheint auf lange Sicht die beste Lösung zu sein, aber ich bezweifle, dass der Kunde mich diese implementieren lässt. Niemals Zeit oder Geld, um die Dinge richtig zu reparieren, sondern immer Zeit und Geld, um das gleiche Problem 40 oder 50 Mal zu beheben, oder?
Kann jemand andere Ansätze vorschlagen, die ich möglicherweise nicht in Betracht gezogen habe?