На языке ОО (например, но не только на Java), как вы исправляете дублирующий код в зависимости от области его появления? Я бы начал с (например)
- в том же классе (области действия) выполнить рефакторинг Извлечь метод (исправить)
- в классах той же иерархии (области видимости) выполнить Extract Method и Pull Up (исправить)
- ...
object-oriented
dry
Питер Кофлер
источник
источник
Ответы:
Недавно я нашел хороший ответ на свой вопрос в «Чистом коде» дяди Боба, которым хочу поделиться. Он различает три типа дублирования
Части идентичного кода должны быть заменены одним методом. Таким образом, исправление будет состоять в том, чтобы извлечь метод и делегировать обычное поведение.
SthUtil
илиSthLib
).случаи
switch/case
иif/else
которые всегда проверяют один и тот же набор условий .Модули, которые реализуют аналогичные алгоритмы . Их труднее всего найти, поскольку их не может обнаружить ни один клон-детектор.
Также допустимый момент, упомянутый Одедом, при работе с разными версиями библиотек
В конце концов, лучшее предложение, чтобы ответить на мой вопрос:
источник
В общем, объедините дублирующийся код в одном месте и убедитесь, что исходный сайт дублирования вызывает объединенное место.
В ваших примерах в классе это будет извлеченный метод, а в наборе классов - метод pull-up в базовом классе.
В коде копирования-вставки это будет означать удаление дубликатов и обеспечение того, чтобы все пользователи теперь использовали единственную копию (на каком бы уровне это ни было).
При работе с разными версиями библиотек объединяйтесь в одну версию (если это возможно).
источник
Я думаю, что это открытый вопрос, но он также зависит от состояния кода. Я имею в виду, вы можете терпеть дубликата кода немного в зависимости от контекста. Правило трех хорошо для этого вопроса.
Правило Три В первый раз, когда вы делаете что-то, вы просто делаете это. Во второй раз, когда вы делаете что-то подобное, вы вздрагиваете при дублировании, но вы все равно делаете дубликат. В третий раз вы делаете что-то подобное, вы рефакторинг.
Несмотря на то, что это в значительной степени спорно, это сообщение также рассматривает случаи , когда вы выдерживающие повторяющийся код.
источник