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

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

Проблема

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

Рішення

Замініть методи полями в батьківському класі і видаліть підкласи.

До
Replace Subclass with Fields - Before
Після
Replace Subclass with Fields - After

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

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

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

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

Переваги

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

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

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

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

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

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

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

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

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

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

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

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

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

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