Глянь мій новий курс по Git! Привіт! Глянь мій новий курс по Git! Привіт! Глянь мій новий курс по Git на GitByBit.com! Привіт! Хочеш класно освіжити Git? Глянь мій новий курс на GitByBit.com!

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

Також відомий як: 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");

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

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

Переваги

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

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

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

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

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

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

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

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

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