Також відомий як Change Value to Reference

Рефакторинг Заміна значення посиланням

Проблема

Є багато однакових екземплярів одного класу, які можна замінити одним об'єктом.

Рішення

Перетворіть однакові об'єкти на один об'єкт-посилання.
До
Change Value to Reference - Before
Після
Change Value to Reference - After

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

У багатьох системах об'єкти можна розділити на дві категорії — об'єкти-значення і об'єкти-посилання.

  • Об'єкти-посилання — це коли одному об'єкту реального світу відповідає тільки один об'єкт програми. Об'єктами-посиланнями зазвичай стають об'єкти користувачів, замовлень, товарів та ін.

  • Об'єкти-значення — одному об'єкту реального світу відповідає безліч об'єктів в програмі. Такими об'єктами можуть бути дати, телефонні номери, адреси, колір та ін.

Вибір між посиланням і значенням не завжди очевидний. Іноді спочатку є просте значення з невеликим об'ємом незмінних даних. Потім виникає необхідність додати змінювані дані і забезпечити передачу цих змін при всіх зверненнях до об'єкту. Тоді з'являється необхідність перетворити його на об'єкт-посилання.

Переваги

  • Один об'єкт зберігає в собі всю останню інформацію про певну сутність. Якщо в цей об'єкт вносяться зміни в одній частині програми, вони тут же стають доступними з інших частин програми, що використовують цей об'єкт.

Недоліки

  • Об'єкти-посилання набагато складніші в реалізації.

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

  1. Використайте заміну конструктора фабричним методом над класом, який повинен породжувати об'єкти-посилання.

  2. Визначте, який об'єкт буде відповідальним за надання доступу до об'єктів-посилань. Замість створення нового об'єкту, коли він потрібний, вам тепер треба отримувати його з якогось об'єкту-сховища або статичного поля-словника.

  3. Визначте, чи будуть об'єкти-посилання створюватись заздалегідь або динамічно в міру потреби. Якщо об'єкти створюються заздалегідь, необхідно забезпечити їх завантаження перед використанням.

  4. Змініть фабричний метод так, щоб він повертав об'єкт-посилання. Якщо об'єкти створюються заздалегідь, необхідно вирішити, як обробляти помилки при запиті неіснуючого об'єкту. Також вам може знадобитися застосувати до фабрики перейменування методу для інформації про те, що метод повертає тільки існуючі об'єкти.

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

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

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

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

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

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

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

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