#рефакторинг #запахи_кода ![[Pasted image 20241112230900.png]] > Цепочки сообщений возникают, когда клиент запрашивает у одного объекта другой, у того клиент в свою очередь запрашивает еще один объект, у которого запрашивается еще один... и т. д. Это может выглядеть как длинный ряд методов типа `getThis` или как последовательность временных переменных. Такие после­довательности вызовов означают, что клиент связан со структурой классов, и лю­бые изменения промежуточных связей приводят к необходимости модификации клиента. ### **Признаки** - Вы видите в коде цепочки вызовов вроде такой $a->b()->c()->d() ### **Причины появления** Цепочка вызовов появляется тогда, когда клиент запрашивает у одного объекта другой, в свою очередь этот объект запрашивает ещё один и т. д. Такие последовательности вызовов означают, что клиент связан с навигацией по структуре классов. Любые изменения промежуточных связей означают необходимость модификации клиента. ![[Pasted image 20241112230908.png]] ### **Рефакторинги** - [[Сокрытие делегата (Hide Delegate)]] - [[Извлечение функции (Extract Function)]] - [[Перенос функции (Move Function)]] ![[Pasted image 20241112230914.png]] ### **Результат** - Может уменьшить связность между классами цепочки - Может уменьшить размер кода ### **Не стоит трогать, если...** - Если вы перестараетесь в процессе сокрытия делегирования, в коде будет довольно сложно понять, где именно осуществляется конкретная работа. Другими словами, появится запах **[[Посредник]]** ### **Ссылки** - [https://refactoring.guru/ru/smells/message-chains](https://refactoring.guru/ru/smells/message-chains) - [[Мартин Фаулер - Рефакторинг кода на JavaScript]]