Я ищу руководство по соединению DRY vs Code. Я не люблю дублировать мой код, а также мне не нравится связывание кода между несвязанными модулями. Поэтому я реорганизую дублирующий код, если найду идентично дублирующий код через год после того, как дублирование было введено. Однако я все чаще сталкиваюсь с ситуациями, когда реальный мир становится гораздо более непредсказуемым, и после рефакторинга кода возникают ситуации, которые требуют повторного раскладывания кода.
Например, если бы у меня был код для работы с бензиновыми автомобилями, бензиновыми внедорожниками, электромобилями и электрическими внедорожниками, допустим, я преобразовал дублирующий код в иерархию «бензин» и «электрическую», обе из иерархии «транспортных средств». Все идет нормально. И затем, моя компания представляет гибридный автомобиль и гибридный Semi, что потребует внесения основных изменений в мою первоначальную иерархию. Возможно, для этого потребуется «состав» между бензином и электрической иерархией.
Очевидно, что дублирование кода является плохим, потому что оно увеличивает время, необходимое для реализации изменений, общих для всех вышеупомянутых продуктов. Но рефакторинг общего кода делает одинаково трудным введение специфичных для продукта вариаций и приводит к большому количеству «скачков классов», когда нужно найти строку кода, чтобы исправить ошибку - одно изменение в родительском классе более высокого уровня может вызвать триггеры регрессии ошибок среди всех потомков.
Как найти оптимальный баланс между СУХОЙ и нежелательной связью кода?