Лучше вообще не иметь никакого сеттера.Инициализируйте все необходимые свойства в конструкторе (пусть конструктору потребуются аргументы для этого).
Код, который вы разместили, не ООП, а замаскированный процедурный код.Если вы хотите сделать его ООП, тогда код должен оставаться там, где находятся данные, то есть в классе.
В качестве первого шага улучшения ваш код должен выглядеть следующим образом:
class Management {
constructor(nb, regionalSalary, stateSalary, executiveSalary) {
this.numberOfManagers = nb;
this.salaryDetails = {
regionalManagerSalary: regionalSalary,
stateManagerSalary: stateSalary,
executiveManagerSalary: executiveSalary
};
}
}
const management = new Management(100, 100000, 120000, 210000);
Короче, намного чище, меньше подвержено ошибкам.
Фрагмент, который вы разместили, недостаточен, чтобы сказать, чего вы хотите достичь, но новая подпись конструктора говорит мне, что вы смешиваете слишком много обязанностей в одном классе.
Более понятный дизайн - использование отдельных классов для каждого типа менеджера:
/* abstract */ class Manager {
constructor(salary) {
this.salary = salary;
}
}
class RegionalManager extends Manager { }
class StateManager extends Manager { }
class ExecutiveManager extends Manager { }
class Management {
constructor(nb, regionalManager, stateManger, executiveManager) {
this.numberOfManagers = nb;
this.managers = {
regionalManager: regionaManager,
stateManager: stateManager,
executiveManager: executiveManager
};
}
}
const management = new Management(
100,
new RegionalManager(100000),
new StateManager(120000),
new ExecutiveManager(210000)
);
Теперь вы можете реализовать логику, общую для всех типов менеджера в классе Manager
, логику, которая является специфическойкаждому типу менеджера в своем классе и логике, которая обрабатывает менеджеров по номеру, не заботясь об их индивидуальных характеристиках, в классе Management
.Таким образом, код использует меньше условий if
и switch
, его легче читать, понимать и развивать.