#рефакторинг #методы_рефакторинга ![[Pasted image 20250220083403.png]] ### **Проблема** В интерфейсе стека присутствовали все операции списка, хотя большинство из них к стеку были не применимы. ```javascript class List {...} class Stack extends List {...} ``` ### **Решение** Превратить список в поле стека и делегировать ему необходимые операции. ```javascript class Stack { constructor() { this._storage = new List(); } } class List {...} ``` ### **Причины рефакторинга** Если функции суперкласса не имеют смысла для подкласса, это признак того, что я не должен применять наследование для использования функциональности суперкласса. ### **Порядок рефакторинга** 1. Создайте в подклассе поле, которое ссылается на объект суперкласса. Инициализируйте эту ссылку делегата новым экземпляром 2. Для каждого элемента суперкласса создайте в подклассе функцию передачи, которая выполняет передачу созданной ссылке на делегата. Выполните тестирование после реализации передачи для каждой согласованной группы. 3. Когда все элементы суперкласса окажутся перекрыты передающими функциями, удалите наследование. ### **Ссылки** - [[Мартин Фаулер - Рефакторинг кода на JavaScript]]