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:
or0ist 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, or0aber anstatt aufzurufen or0, kopiert Programmierer A die gesamte Klasse und benennt sie um. Ich vermute, dass sie nicht anruft, or0weil 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 or0und 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, or0so dass es jetzt Version ist orN. c0ist jetzt Version cN. Leider or0schienen sich die meisten Programmierer, die die Klasse enthielten , überhaupt nicht bewusst zu c0sein - 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 or0und c0unabhä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 orNalle erforderlichen Parameter aufzurufen, die übergeben wurden.
b.) Versuchen Sie, Fixes manuell von orNbis zu portieren cN. (Wohlgemerkt, ich möchte das nicht tun, aber es ist eine realistische Möglichkeit.)
c.) Wiederholen, orNum noch cNeinmal, yuck, aber ich liste es der Vollständigkeit halber auf.
d.) Versuchen Sie herauszufinden, wo ein cNDefekt 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?
