Ланцюжок викликів
Також відомий як: Message Chains
Симптоми і ознаки
Ви бачите в коді ланцюжок викликів на зразок такого $a->b()->c()->d()
Причини появи
Ланцюжок викликів з’являється тоді, коли клієнт запитує один об’єкт щодо іншого, у свою чергу цей об’єкт запитує ще один і т. д. Такі послідовності викликів означають, що клієнт є пов’язаний з навігацією по структурі класів. Будь-які зміни проміжних зв’язків означають, що клієнт потрібно буде модифікувати.
Лікування
-
Для видалення ланцюжка викликів застосовується прийом прихованого делегування.
-
Іноді краще розглянути, для чого використовується кінцевий об’єкт. Можливо, має сенс використати відокремлення методу, щоб витягнути цю функціональність і перенести її в самий початок ланцюга за допомогою переміщення методу.
Виграш
-
Зменшується зв’язність між класами ланцюжка.
-
Зменшується розмір коду.
Не варто чіпати, якщо...
- Якщо ви перестараєтеся в процесі приховування делегування, в коді буде досить складно зрозуміти, де саме здійснюється конкретна робота. Іншими словами, з’явиться запах Посередник.