---
title: "Замена параметров объектом"
type: "refactoring-technique"
slug: "introduce-parameter-object"
url: "http://localhost:3000/ru/introduce-parameter-object.md"
category: "Упрощение вызовов методов"
description: "Проблема: В ваших методах встречается повторяющаяся группа параметров. Решение: Замените эти параметры объектом."
---
# Замена параметров объектом

> Проблема: В ваших методах встречается повторяющаяся группа параметров. Решение: Замените эти параметры объектом.

## Problem

В ваших методах встречается повторяющаяся группа параметров.

## Solution

Замените эти параметры объектом.

## Why Refactor

Одинаковые группы параметров зачастую встречаются не в единственном методе. Это приводит к дублированию кода, как самих параметров, так и частых операций над ними. Как только вы сведёте параметры в одном классе, вы сможете переместить туда и методы обработки этих данных, очистив от этого кода другие методы.

## Benefits

* Улучшает читабельность кода. Вместо пачки разнообразных параметров вы видите один объект с понятным названием.
* Одинаковые группы параметров тут и там создают особый род дублирования кода, при котором вроде бы не происходит вызова идентичного кода, но все время встречаются одинаковые группы параметров и аргументов.

## How to Refactor

1. Создайте новый класс, который будет представлять вашу группу параметров. Сделайте так, чтобы данные объектов этого класса нельзя было изменить после создания.
2. В методе, к которому применяем рефакторинг, [добавьте новый параметр](/ru/add-parameter), в котором будет передаваться ваш объект-параметр. Во всех вызовах метода передавайте в этот параметр объект, создаваемый из старых параметров метода.
3. Теперь начинайте по одному удалять старые параметры из метода, заменяя их в коде полями объекта-параметра. Тестируйте программу после каждой замены параметра.
4. По окончанию оцените, есть ли возможность и смысл перенести какую-то часть метода (а иногда и весь метод) в класс объекта-параметра. Если так, используйте [перемещение метода](/ru/move-method) или [извлечение метода](/ru/extract-method), чтобы осуществить перенос.
## Relations

**Similar techniques**

- [Передача всего объекта](/ru/preserve-whole-object.md)

**Eliminates smells**

- [Длинный список параметров](/ru/smells/long-parameter-list.md)
- [Группы данных](/ru/smells/data-clumps.md)
- [Одержимость элементарными типами](/ru/smells/primitive-obsession.md)
- [Длинный метод](/ru/smells/long-method.md)

