Також відомий як Replace Subclass with Fields

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

Проблема

У вас є підкласи, які відрізняються тільки методами, що повертають дані-константи.

Рішення

Замініть методи полями в батьківському класі і видаліть підкласи.
До
Replace Subclass with Fields - Before
Після
Replace Subclass with Fields - After

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

Буває так, що вам треба розгорнути дію рефакторингу позбавлення від кодування типу.

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

Потреба в цих змінах могла виникнути після переміщення великої кількості функціональності з ієрархії класів кудись в інше місце. Після цього поточна ієрархія втратила свою цінність, і підкласи стали створювати тільки надмірну складність.

Переваги

  • Спрощує архітектуру системи. Створення підкласів – зайве рішення, якщо все, що треба зробити, це повертати різні значення в декількох методах.

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

  1. Застосуйте до підкласів заміну конструктора фабричним методом.

  2. Якщо якийсь код посилається на підкласи, замініть його використанням суперкласу.

  3. Оголосіть в суперкласі поля для зберігання значень кожного з методів підкласів, що повертають константні значення.

  4. Створіть захищений конструктор суперкласу для ініціалізації нових полів.

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

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

  7. Якщо конструктор підкласу має якусь додаткову функціональність, застосуйте вбудовування методу для вбудовування конструктора в фабричний метод суперкласу.

  8. Видаліть підклас.

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

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

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

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

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

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

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

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