1.9 KiB
1.9 KiB
#рефакторинг #методы_рефакторинга
Проблема
В интерфейсе стека присутствовали все операции списка, хотя большинство из них к стеку были не применимы.
class List {...}
class Stack extends List {...}
Решение
Превратить список в поле стека и делегировать ему необходимые операции.
class Stack {
constructor() {
this._storage = new List();
}
}
class List {...}
Причины рефакторинга
Если функции суперкласса не имеют смысла для подкласса, это признак того, что я не должен применять наследование для использования функциональности суперкласса.
Порядок рефакторинга
- Создайте в подклассе поле, которое ссылается на объект суперкласса. Инициализируйте эту ссылку делегата новым экземпляром
- Для каждого элемента суперкласса создайте в подклассе функцию передачи, которая выполняет передачу созданной ссылке на делегата. Выполните тестирование после реализации передачи для каждой согласованной группы.
- Когда все элементы суперкласса окажутся перекрыты передающими функциями, удалите наследование.
