Цепочка вызовов
Также известен как: Message Chains
Симптомы и признаки
Вы видите в коде цепочки вызовов вроде такой $a->b()->c()->d()
Причины появления
Цепочка вызовов появляется тогда, когда клиент запрашивает у одного объекта другой, в свою очередь этот объект запрашивает ещё один и т. д. Такие последовательности вызовов означают, что клиент связан с навигацией по структуре классов. Любые изменения промежуточных связей означают необходимость модификации клиента.
Лечение
-
Для удаления цепочки вызовов применяется приём сокрытие делегирования.
-
Иногда лучше рассмотреть, для чего используется конечный объект. Может быть, имеет смысл использовать извлечение метода, чтобы извлечь эту функциональность, и передвинуть её в самое начало цепи с помощью перемещения метода.
Выигрыш
-
Может уменьшить связность между классами цепочки.
-
Может уменьшить размер кода.
Не стоит трогать, если...
- Если вы перестараетесь в процессе сокрытия делегирования, в коде будет довольно сложно понять, где именно осуществляется конкретная работа. Другими словами, появится запах Посредник.