Ответ вслух Junior SOLID и принципы обновлено

Стратегия

Вопрос

Паттерн «стратегия» - что это и когда пригождается на фронте?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Стратегия - набор взаимозаменяемых алгоритмов за одним интерфейсом, выбираемых в рантайме. Цель - вынести ветвление из вызывающего кода.

Что должно прозвучать в ответе

  • семейство взаимозаменяемых алгоритмов за общим интерфейсом

  • выбор алгоритма происходит в рантайме

  • убирает ветвление по типу из вызывающего кода

  • фронт: правила валидации, форматтеры, способы сортировки

  • реализуется объектом-словарём функций, классы не нужны

  • родственник - реестр компонентов по типу ячейки

Что могут спросить следом

  • Чем стратегия отличается от простого switch
  • Как типизировать словарь стратегий в TypeScript
  • Где стратегия избыточна

Разбор

Стратегия - набор взаимозаменяемых алгоритмов за одним интерфейсом, выбираемых в рантайме. Цель - вынести ветвление из вызывающего кода.

Во фронтенде он почти всегда выглядит как объект-словарь функций:

const VALIDATORS = {
  email: (v) => /.+@.+/.test(v) || 'неверная почта',
  phone: (v) => v.replace(/\D/g, '').length === 11 || 'нужно 11 цифр',
};
const check = VALIDATORS[field.type];

Так же делают форматтеры валют, компараторы сортировки, рендереры ячеек таблицы. Классы для этого не нужны - функция и есть стратегия.

Выгода: добавление нового типа не трогает существующий код (тот самый принцип O).

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.