Autumn SALE

Заміна поля-масиву об'єктом

Також відомий як: 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 = [];
$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 — його адресу. Такий варіант не лише може привести до фатальних наслідків, коли хтось покладе щось не в той елемент, але також вимагає витрати величезної кількості часу на запам’ятовування того, де які дані зберігаються.

Переваги

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

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

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

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

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

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

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

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

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