2.7 KiB
#рефакторинг #запахи_кода
Цепочки сообщений возникают, когда клиент запрашивает у одного объекта другой, у того клиент в свою очередь запрашивает еще один объект, у которого запрашивается еще один... и т. д. Это может выглядеть как длинный ряд методов типа
getThisили как последовательность временных переменных. Такие последовательности вызовов означают, что клиент связан со структурой классов, и любые изменения промежуточных связей приводят к необходимости модификации клиента.
Признаки
- Вы видите в коде цепочки вызовов вроде такой $a->b()->c()->d()
Причины появления
Цепочка вызовов появляется тогда, когда клиент запрашивает у одного объекта другой, в свою очередь этот объект запрашивает ещё один и т. д. Такие последовательности вызовов означают, что клиент связан с навигацией по структуре классов. Любые изменения промежуточных связей означают необходимость модификации клиента.
Рефакторинги
- Сокрытие делегата (Hide Delegate)
- Извлечение функции (Extract Function)
- Перенос функции (Move Function)
Результат
- Может уменьшить связность между классами цепочки
- Может уменьшить размер кода
Не стоит трогать, если...
- Если вы перестараетесь в процессе сокрытия делегирования, в коде будет довольно сложно понять, где именно осуществляется конкретная работа. Другими словами, появится запах Посредник


