2.8 KiB
2.8 KiB
#рефакторинг #запахи_кода
Когда мы делим программы на модули, мы пытаемся разделить код на такие зоны, чтобы максимизировать взаимодействие внутри зоны и минимизировать взаимодействие между зонами. Классический пример — когда функция в одном модуле тратит больше времени на общение с функциями или данными внутри другого модуля, чем в своем собственном. Функция четко хочет быть поближе к данным.
Признаки
- Метод обращается к данным другого объекта чаще, чем к собственным данным
Причины появления
- После перемещения каких-то полей в класс данных. В этом случае операции с данными, возможно, также следует переместить в этот класс.
Рефакторинги
То, что изменяется одновременно, нужно хранить в одном месте. Обычно данные и функции, использующие эти данные, также изменяются вместе (хотя бывают исключения).
- Перенос функции (Move Function)
- Извлечение функции (Extract Function)
- Перенос функции (Move Function)
Результат
- Уменьшение дублирования кода (если код работы с данными переехал в одно общее место)
- Улучшение организации кода (так как методы работы с данными находятся возле этих данных)
Не стоит трогать, если...
- Бывают случаи, когда поведение намеренно отделяется от класса, содержащего данные. Чаще всего это делают для того, чтобы иметь возможность динамически менять это поведение (паттерны Стратегия, Посетитель и т. д.).


