Замена поля-массива объектом
Этот рефакторинг является особым случаем замены простого поля объектом.
Проблема
У вас есть массив, в котором хранятся разнотипные данные.
Решение
Замените массив объектом, который будет иметь отдельные поля для каждого элемента.
String[] row = new String[2];
row[0] = "Liverpool";
row[1] = "15";
Performance row = new Performance();
row.setName("Liverpool");
row.setWins("15");
string[] row = new string[2];
row[0] = "Liverpool";
row[1] = "15";
Performance row = new Performance();
row.SetName("Liverpool");
row.SetWins("15");
$row = [];
$row[0] = "Liverpool";
$row[1] = 15;
$row = new Performance;
$row->setName("Liverpool");
$row->setWins(15);
row = [None * 2]
row[0] = "Liverpool"
row[1] = "15"
row = Performance()
row.setName("Liverpool")
row.setWins("15")
let row = new Array(2);
row[0] = "Liverpool";
row[1] = "15";
let row = new Performance();
row.setName("Liverpool");
row.setWins("15");
Причины рефакторинга
Массивы — отличный инструмент для хранения однотипных данных и коллекций. Но ждите беды, если вы используете массив в качестве банковских ячеек, например, храните в ячейке №1 — имя пользователя, а в ячейке №14 — его адрес. Такой подход не только может привести к фатальным последствиям, когда кто-то положит что-то не в ту ячейку, но также требует затраты огромного количества времени на запоминание того, где какие данные хранятся.
Достоинства
-
В образовавшийся класс можно переместить все связанные поведения, которые раньше хранились в основном классе или в других местах.
-
Поля класса гораздо проще документировать, чем ячейки массива.
Порядок рефакторинга
-
Создайте новый класс, который будет содержать данные из массива. Поместите в него сам массив как публичное поле.
-
Создайте поле для хранения объекта этого класса в исходном классе. Не забудьте создать также сам объект в том месте, где вы инициировали массив данных.
-
В новом классе один за другим создавайте методы доступа для всех элементов массива. Давайте им понятные названия, которые отражают суть того, что они хранят. В тоже время изменяйте каждый случай использования ячейки массива в основном коде соответствующими методами доступа к этой ячейке.
-
Когда методы доступа будут созданы для всех ячеек, сделайте массив приватным.
-
Для каждого элемента массива создайте приватное поле в классе, после чего измените методы доступа так, чтобы они использовали это поле вместо массива.
-
Когда все данные будут перемещены, удалите массив.