Szukam wskazówek na temat łączenia DRY vs Code. Nie lubię powielać mojego kodu, a także nie lubię łączenia kodu między niepowiązanymi modułami. Dlatego zmieniam kod zduplikowanego kodu, jeśli znajdę identycznie zduplikowany kod rok po wprowadzeniu duplikacji. Jednak coraz częściej doświadczam sytuacji, w których świat rzeczywisty jest znacznie bardziej nieprzewidywalny, a po przeredagowaniu kodu pojawiają się sytuacje, które wymagają ponownego wykasowania kodu.
Na przykład, jeśli miałem kod do obsługi samochodów z benzyną, SUV-ów z benzyną, samochodów elektrycznych i SUV-ów elektrycznych, powiedzmy, że przebudowałem zduplikowany kod do hierarchii „benzyny” i hierarchii „elektrycznej”, obie pochodzące z hierarchii „pojazdu”. Jak na razie dobrze. A potem moja firma wprowadza samochód hybrydowy i hybrydowy Semi - które wymagałyby zasadniczych zmian w mojej oryginalnej hierarchii. Być może wymagałoby to „składu” między benzyną a hierarchiami elektrycznymi.
Wyraźne powielanie kodu jest złe, ponieważ wydłuża czas potrzebny na wdrożenie zmiany wspólnej dla wszystkich powyższych produktów. Ale refaktoryzacja wspólnego kodu sprawia, że równie trudno jest wprowadzić odmiany specyficzne dla produktu i prowadzi do wielu „skoków klas”, gdy trzeba znaleźć linię kodu, aby naprawić błąd - jedna zmiana w klasie nadrzędnej wyższego poziomu mogłaby wywołać błędy regresji wyzwalacza wśród wszystkich potomków.
Jak znaleźć optymalną równowagę między OSUSZANIEM a niepożądanym sprzężeniem kodu?