32 lines
2.7 KiB
Markdown
32 lines
2.7 KiB
Markdown
#рефакторинг #запахи_кода
|
||
|
||
![[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]] |