---
title: "Удаление посредника"
type: "refactoring-technique"
slug: "remove-middle-man"
url: "http://localhost:3000/ru/remove-middle-man.md"
category: "Перемещение функций между объектами"
description: "Проблема: Класс имеет слишком много методов, которые просто делегируют работу другим объектам. Решение: Удалите эти методы и заставьте клиента вызывать конечные методы напрямую."
---
# Удаление посредника

> Проблема: Класс имеет слишком много методов, которые просто делегируют работу другим объектам. Решение: Удалите эти методы и заставьте клиента вызывать конечные методы напрямую.

## Problem

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

## Solution

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

## Why Refactor

В этом рефакторинге мы будем использовать названия из [сокрытия делегирования](/ru/hide-delegate), а именно:

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

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

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

## How to Refactor

1. Создайте геттер для доступа к объекту _класса-делегата_ из объекта _класса-сервера_.
2. Замените вызовы делегирующих методов _класса-сервера_ прямыми вызовами методов _класса-делегата_.
## Relations

**Opposite refactorings**

- [Сокрытие делегирования](/ru/hide-delegate.md)

**Eliminates smells**

- [Посредник](/ru/smells/middle-man.md)

