alex4answ
@alex4answ

Функционал в конкретном методе или в хуке — делегате?

Добрый день, изучаю библиотеку, наткнулся на обработчик хука, который в зависимости от текущей операции вызывает другой обработчик (ниже пример):
const MAKE_MAIN = 'makeMain';
const MAKE_SUBORDINATE = 'makeSubordinate'

Model.prototype.makeMain = function() {
  this.operation = MAKE_MAIN;
  this.save();
};

Model.prototype.makeSubordinate= function() {
  this.operation = MAKE_SUBORDINATE ;
  this.save();
};

Model.beforeSave( (target, option) => { /* очень простая валидация */ }); // единственный общий обработчик.

Model.afterSave( (target, options) => {
  switch(target.operation) {
    case MAKE_MAIN:
      target.makeMainHandler();
      break;
    case MAKE_SUBORDINATE:
      target.makeSubordinateHandler();
      break;
  }
});

Model.prototype.makeMainHandler = function() { /* уже конкретно делающий всю работу метод */};
Model.prototype.makeSubordinateHandler= function() { /* уже конкретно делающий всю работу метод */};


И мне показалось странным, зачем все прогонять через обработчики событий/хуки, ведь можно сразу выполнить всю работу в makeMain и makeSubordinate, не прогоняя все это через хуки, не выполняя лишних проверок и тп.

Так и код проще и каждый метод выполняет четко поставленную ему задачу, нет лишней связи, переменных указывающих "текущая операция" и тп, единственное - общий обработчик ( валидацию в хуке, перед сохранением ) придется "продублировать", но это не страшно.

Это мне напомнило огромные редьюсеры в Redux.

На сколько я правильно мыслю, в чем плюсы подхода автора, зачем так делают ?
  • Вопрос задан
  • 40 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы