ConstructiCat Logo
CodeBust.
Browse section ▾

Удаление посредника.

Problem

Класс имеет слишком много методов, которые просто делегируют работу другим объектам.

Solution

Удалите эти методы и заставьте клиента вызывать конечные методы напрямую.

##Example

До
Remove Middle Man - Before
После
Remove Middle Man - After

##Why Refactor

В этом рефакторинге мы будем использовать названия из сокрытия делегирования, а именно:

  • Сервер — это объект, к которому клиент имеет непосредственный доступ.

  • Делегат — это конечный объект, который содержит функциональность, нужную клиенту.

Существует два вида проблем:

  1. Класс-сервер ничего не делает сам по себе, создавая бесполезную сложность. В этом случае стоит задуматься, нужен ли этот класс вообще.

  2. Каждый раз, когда в делегате появляется новая фича, для нее нужно создавать делегирующий метод в классе-сервере. Это бывает накладно при большом количестве изменений.

##How to Refactor

  1. Создайте геттер для доступа к объекту класса-делегата из объекта класса-сервера.

  2. Замените вызовы делегирующих методов класса-сервера прямыми вызовами методов класса-делегата.