#рефакторинг #методы_рефакторинга ![[Pasted image 20250219083648.png]] ### **Проблема** Два класса имеют одно и то же поле ```javascript class Party {...} class Employee extends Party { constructor(name, id, monthlyCost) { super(); this._id = id; this._name = name; this._monthlyCost = monthlyCost; } } ``` ### **Решение** Переместите поле в суперкласс, убрав его из подклассов. ```javascript class Party { constructor(name){ this._name = name; } } class Employee extends Party { constructor(name, id, monthlyCost) { super(name); this._id = id; this._monthlyCost = monthlyCost; } } ``` ### **Причины рефакторинга** В большинстве языков программирования конструктор подкласса может иметь свой собственный список параметров, отличный от параметров суперкласса, поэтому вы должны создать конструктор суперкласса только с теми параметрами, которые ему действительно нужны. ### **Порядок рефакторинга** 1. Создайте конструктор в суперклассе 2. Извлеките общий код из начала конструктора каждого из подклассов в конструктор суперкласса. Перед этим действием стоит попробовать поместить как можно больше общего кода в начало конструктора 3. Поместите вызов конструктора суперкласса первой строкой в конструкторах подклассов ### **Борется с запахом** - [[Дублируемый код]] ### **Ссылки** - https://refactoring.guru/ru/pull-up-constructor-body - [[Мартин Фаулер - Рефакторинг кода на JavaScript]]