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

> Проблема: Поле используется в другом классе больше, чем в собственном. Решение: Создайте поле в новом классе и перенаправьте к нему всех пользователей старого поля.

## Problem

Поле используется в другом классе больше, чем в собственном.

## Solution

Создайте поле в новом классе и перенаправьте к нему всех пользователей старого поля.

## Why Refactor

Зачастую поля переносятся как часть [извлечение одного класса из другого](/ru/extract-class). Решить, в каком из классов должно остаться поле, бывает непросто. Тем не менее, у нас есть неплохой рецепт — **поле должно быть там, где находятся методы, которые его используют** (либо там, где этих методов больше).

Это правило поможет вам и в других случаях, когда поле попросту находится не там, где нужно.

## How to Refactor

1. Если поле публичное, вам будет намного проще совершить рефакторинг, если вы сделаете его приватным и предоставите публичные методы доступа (для этого можно использовать рефакторинг [инкапсуляция поля](/ru/encapsulate-field)).
2. Создайте такое же поле с методами доступа в классе-приёмнике.
3. Определите, как вы будете обращаться к классу-получателю. Вполне возможно, у вас уже есть поле или метод, которые возвращают подходящий объект. Если нет — нужно будет написать новый метод или поле, в котором бы хранился объект класса-получателя.
4. Замените все обращения к старому полю на соответствующие вызовы методов в классе-получателе. Если поле не приватное, проделайте это и в суперклассе, и в подклассах.
5. Удалите поле в исходном классе.
## Relations

**Helps you do**

- [Извлечение класса](/ru/extract-class.md)
- [Встраивание класса](/ru/inline-class.md)

**Similar techniques**

- [Перемещение метода](/ru/move-method.md)

**Eliminates smells**

- [Стрельба дробью](/ru/smells/shotgun-surgery.md)
- [Параллельные иерархии наследования](/ru/smells/parallel-inheritance-hierarchies.md)
- [Неуместная близость](/ru/smells/inappropriate-intimacy.md)

