Jestem pewien, że istnieje gdzieś nazwa tego anty-wzoru; jednak nie znam wystarczająco literatury anty-wzorcowej, aby ją poznać.
Rozważ następujący scenariusz:
or0
jest funkcją członka w klasie. Na lepsze lub gorsze, w dużym stopniu zależy to od zmiennych członków klasy. Programator A pojawia się i potrzebuje funkcji, or0
ale zamiast wywoływania or0
, programista A kopiuje i zmienia nazwę całej klasy. Zgaduję, że ona nie dzwoni, or0
ponieważ, jak mówię, jej funkcjonalność jest silnie zależna od zmiennych składowych. A może jest młodszym programistą i nie wie, jak to wywołać z innego kodu. Więc teraz mamy or0
i c0
(c dla kopii). Nie mogę całkowicie winić programisty A za to podejście - wszyscy mamy napięte terminy i włamujemy się do kodu, aby wykonać pracę.
Wielu programistów utrzymuje, or0
więc jest to teraz wersja orN
. c0
jest teraz wersją cN
. Niestety większość programistów, którzy utrzymywali zawieranie klas, or0
wydawała się zupełnie nieświadoma - c0
co jest jednym z najsilniejszych argumentów, jakie mogę wymyślić dla mądrości zasady DRY. I może istnieć także niezależne utrzymanie kodu w c
. Tak czy inaczej wydaje się, że or0
i c0
były utrzymywane od siebie niezależne. I, radość i szczęście, pojawia się błąd cN
, który nie występuje w orN
.
Mam więc kilka pytań:
1.) Czy istnieje nazwa tego anty-wzoru? Widziałem to tak często, że trudno mi uwierzyć, że to nie jest nazwany anty-wzór.
2.) Widzę kilka alternatyw:
a.) Napraw, orN
aby pobrać parametr określający wartości wszystkich potrzebnych zmiennych składowych. Następnie zmodyfikuj, cN
aby zadzwonić orN
ze wszystkimi potrzebnymi parametrami przekazanymi.
b.) Spróbuj ręcznie przenieść poprawki od orN
do cN
. (Pamiętaj, że nie chcę tego robić, ale jest to realistyczna możliwość).
c.) Skopiuj ponownie orN
do - cN
znowu, fuj, ale wymieniam to ze względu na kompletność.
d.) Spróbuj dowiedzieć się, gdzie cN
jest zepsuty, a następnie napraw go niezależnie od orN
.
Alternatywa a wydaje się najlepszym rozwiązaniem na dłuższą metę, ale wątpię, czy klient pozwoli mi ją wdrożyć. Nigdy nie masz czasu ani pieniędzy, aby naprawić problem, ale zawsze masz czas i pieniądze, aby naprawić ten sam problem 40 lub 50 razy, prawda?
Czy ktoś może zasugerować inne podejścia, których mogłem nie brać pod uwagę?