Весняний РОЗПРОДАЖ

Заміна значення посиланням

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

Проблема

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

Рішення

Перетворіть однакові об’єкти на один об’єкт-посилання.

До
Change Value to Reference - Before
Після
Change Value to Reference - After

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

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

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

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

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

Переваги

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

Недоліки

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

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

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

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

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

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