Обзор темы [Рефакторинг кода]

Повторяющийся код (Duplicated Code)

Номер один в хит-параде недостатков – Повторяющийся код. Если есть два повторяющихся участка кода, то можно быть уверенным, что программа только выиграет, если эти участки перейдут в один.

Простейший случай, когда код повторяется в телах двух методов одного класса. Тогда надо просто применить Извлечение метода и вызывать новый метод из всех мест, где повторялся код.

Другой общий случай, когда код повторяется в двух подклассах одного класса. Тогда нужно использовать Извлечение метода в обоих подклассах, а затем применить Поднимание метода. Если код похож, но не одинаков, надо использовать Извлечение метода, чтобы выделить одинаковые части, Затем часто можно применить Формирование шаблонного метода. Если методы делают одно и тоже с помощью разных алгоритмов, то надо выбрать лучший и применить Замену алгоритма.

Если код дублируется в несвязанных классах, можно применить Извлечение класса к одному классу, и использовать извлеченный класс в других. Другая возможность состоит в том, что метод принадлежит одному классу и вызывается другим, либо принадлежит какому-либо постороннему классу, и вызывается всеми классами с повторяющимся кодом.

В общем, метод надо выбирать, согласуясь со здравым смыслом – главное, чтобы не было дублирующегося кода.