ConstructiCat Logo
CodeBust.
Browse section ▾

Замена поля-массива объектом.

Problem

У вас есть массив, в котором хранятся разнотипные данные.

Solution

Замените массив объектом, который будет иметь отдельные поля для каждого элемента.

##Example

Before
String[] row = new String[2];
row[0] = "Liverpool";
row[1] = "15";
After
Performance row = new Performance();
row.setName("Liverpool");
row.setWins("15");

##Why Refactor

Массивы — отличный инструмент для хранения однотипных данных и коллекций. Но ждите беды, если вы используете массив в качестве банковских ячеек, например, храните в ячейке №1 — имя пользователя, а в ячейке №14  — его адрес. Такой подход не только может привести к фатальным последствиям, когда кто-то положит что-то не в ту ячейку, но также требует затраты огромного количества времени на запоминание того, где какие данные хранятся.

##Benefits

  • В образовавшийся класс можно переместить все связанные поведения, которые раньше хранились в основном классе или в других местах.

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

##How to Refactor

  1. Создайте новый класс, который будет содержать данные из массива. Поместите в него сам массив как публичное поле.

  2. Создайте поле для хранения объекта этого класса в исходном классе. Не забудьте создать также сам объект в том месте, где вы инициировали массив данных.

  3. В новом классе один за другим создавайте методы доступа для всех элементов массива. Давайте им понятные названия, которые отражают суть того, что они хранят. В тоже время изменяйте каждый случай использования ячейки массива в основном коде соответствующими методами доступа к этой ячейке.

  4. Когда методы доступа будут созданы для всех ячеек, сделайте массив приватным.

  5. Для каждого элемента массива создайте приватное поле в классе, после чего измените методы доступа так, чтобы они использовали это поле вместо массива.

  6. Когда все данные будут перемещены, удалите массив.