Заміна поля-масиву об'єктом
Цей рефакторинг є особливим випадком заміни простого поля об’єктом.
Проблема
У вас є масив, в якому зберігаються різнотипні дані.
Рішення
Замініть масив об’єктом, який матиме окремі поля для кожного елементу.
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 — його адресу. Такий варіант не лише може привести до фатальних наслідків, коли хтось покладе щось не в той елемент, але також вимагає витрати величезної кількості часу на запам’ятовування того, де які дані зберігаються.
Переваги
-
У клас, що утворився, можна перенести всю пов’язану поведінку, яка раніше зберігалася в основному класі або в інших місцях.
-
Поля класу набагато простіше документувати, ніж елементи масиву.
Порядок рефакторингу
-
Створіть новий клас, який міститиме дані з масиву. Помістіть в нього сам масив як публічне поле.
-
Створіть поле для зберігання об’єкта цього класу в початковому класі. Не забудьте створити також сам об’єкт в тому місці, де ви ініціювали масив даних.
-
У новому класі один за іншим створюйте методи доступу для всіх елементів масиву. Давайте їм зрозумілі назви, які відображають суть того, що вони зберігають. У той же час змінюйте кожен випадок використання елементу масиву в основному коді відповідними методами доступу до цього елементу.
-
Коли методи доступу будуть створені для всіх елементів, зробіть масив приватним.
-
Для кожного елементу масиву створіть приватне поле в класі, після чого змініть методи доступу так, щоб вони використовували це поле замість масиву.
-
Коли всі дані будуть переміщені, видаліть масив.