Також відомий як Replace Array with Object

Рефакторинг Заміна поля-масиву об'єктом

Цей рефакторинг є особливим випадком заміни простого поля об'єктом.

Проблема

У вас є масив, в якому зберігаються різнотипні дані.

Рішення

Замініть масив об'єктом, який матиме окремі поля для кожного елементу.
До
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 = array();
$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")

Причини рефакторингу

Масиви – відмінний інструмент для зберігання однотипних даних і колекцій. Але чекайте біди, якщо ви використовуєте масив як банківські скриньки, наприклад, зберігаєте в елементі №1 — ім'я користувача, а в елементі №14 – його адресу. Такий варіант не лише може привести до фатальних наслідків, коли хтось покладе щось не в той елемент, але також вимагає витрати величезної кількості часу на запам'ятовування того, де які дані зберігаються.

Переваги

  • У клас, що утворився, можна перенести всю пов'язану поведінку, яка раніше зберігалася в основному класі або в інших місцях.

  • Поля класу набагато простіше документувати, ніж елементи масиву.

Порядок рефакторингу

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

  2. Створіть поле для зберігання об'єкту цього класу в початковому класі. Не забудьте створити також сам об'єкт в тому місці, де ви ініціювали масив даних.

  3. У новому класі один за іншим створюйте методи доступу для всіх елементів масиву. Давайте їм зрозумілі назви, які відображають суть того, що вони зберігають. У той же час змінюйте кожен випадок використання елементу масиву в основному коді відповідними методами доступу до цього елементу.

  4. Коли методи доступу будуть створені для всіх елементів, зробіть масив приватним.

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

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

Замучились читати?

Збігайте за подушкою, в нас тут контенту приблизно на 7 годин читання.

Або спробуйте наш новий інтерактивний курс з рефакторингу. Він більш інформативний та набагато цікавіший за банальний тест.

Дізнатися більше...

Живий приклад

Перший раз у нас? Нічого страшного!

У нас тут все просто – цей інтерактивний приклад дуже схожий на відео (хоча й виглядає набагато крутіше).

  1. Натискаєте велику кнопку "Почати", а далі слідуєте усім підказкам.
  2. Ви можете перемотувати програвання, використовуючи стрілки зліва.
  3. Окрім того, ви можете подивитися різницю між стартовим та отриманим кодом, натиснувши кнопку ока ().
  4. Кнопка компіляції та тестування () дає змогу перевірити код на наявність помилок.