Gernar
Frontend DeveloperАрхитектура frontend

Интервью-вопрос

Что такое бизнес-логика

Бизнес-логика - это правила предметной области, которые определяют, что можно сделать в продукте и как должен идти сценарий. Для frontend важно уметь отделять эти правила от разметки, запросов и визуального состояния.

Добавлен
Редакция

Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.

🐰0
🥚0

Мини-квиз

Проверка перед разбором

Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.

Вопрос 1 из 50 правильно

Как лучше объяснить бизнес-логику на интервью?

Вы хотите дать короткое определение без ухода в архитектурные термины.

Варианты ответа

Разбор

Разобраться, а не зазубрить

Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.

Базовая идея

Бизнес-логика отвечает на вопрос: какие правила есть у продукта. Это не цвет кнопки, не способ сверстать карточку и не сам факт HTTP-запроса. Это смысловые ограничения и действия: можно ли применить промокод, какой статус следующий, как рассчитать итог, можно ли пользователю удалить запись.

Для frontend-разработчика важна не только формулировка, но и граница ответственности. Frontend часто помогает пользователю пройти сценарий правильно, но не должен быть единственным местом, где защищены важные правила.

Как это выглядит во frontend-коде

Допустим, в магазине кнопку оформления заказа нужно показывать только если корзина не пустая, товары доступны, профиль подтвержден и нет конфликта с лимитом заказа. Плохой вариант - размазать это условие по разным компонентам.

// Плохо: правило спрятано в JSX и его легко скопировать с ошибкой
{cart.items.length > 0 && user.isVerified && !cart.hasUnavailableItems && (
  <button onClick={submitOrder}>Оформить заказ</button>
)}

Лучше дать правилу имя. Тогда его проще обсудить с командой, переиспользовать и протестировать.

export function canSubmitOrder(cart: Cart, user: User) {
  return (
    cart.items.length > 0 &&
    user.isVerified &&
    !cart.hasUnavailableItems &&
    cart.total <= cart.limit
  );
}
const canSubmit = canSubmitOrder(cart, user);

return (
  <button disabled={!canSubmit} onClick={submitOrder}>
    Оформить заказ
  </button>
);

Важно: даже такой код не заменяет серверную проверку. Он только делает интерфейс понятнее и уменьшает число заведомо неверных действий.

Где держать правило

Как выбрать место для бизнес-правила

1Правило влияет на деньги, права доступа или сохранение данных?
Проверяйте на backend. На frontend можно только подсказать и улучшить UX.
2Правило нужно на нескольких экранах?
Вынесите его из компонента в общий доменный модуль или service-функцию.
3Правило зависит только от входных данных?
Сделайте чистую функцию и покройте ее unit-тестами.
4Правило связано с отображением состояния?
Оставьте в UI-слое только маппинг состояния в текст, стиль или доступность действия.

На интервью хорошо показать, что вы не мыслите крайностями. Не нужно говорить, что вся бизнес-логика живет только на backend или только на frontend. Правильнее говорить про источник истины и цель конкретного правила.

Если правило влияет на безопасность, деньги или права, сервер должен подтвердить его всегда. Если правило помогает пользователю не ошибиться в форме, frontend может проверить его раньше и показать понятное сообщение. Если правило повторяется, его стоит вынести из компонента.

Главная ловушка: UI не равен защите

Если вы скрыли кнопку, это не значит, что действие невозможно. Пользователь может отправить запрос напрямую, изменить payload или вызвать старую версию клиента. Поэтому фраза "мы запретили действие, потому что скрыли кнопку" звучит рискованно.

Более безопасная формулировка: "На клиенте я показываю доступные действия и предупреждаю пользователя, но backend все равно валидирует право и состояние сущности. Если сервер отклоняет действие, frontend должен откатить optimistic UI или показать понятную ошибку".

Безопаснее
  1. 1Получить данные и статус от API
  2. 2Применить локальные подсказки для пользователя
  3. 3Отправить действие на backend
  4. 4Показать результат или понятную ошибку сервера
Опасно
  1. 1Решить все правило только в компоненте
  2. 2Скрыть кнопку и считать это защитой
  3. 3Не обработать отказ backend
  4. 4Оставить UI в состоянии, которое противоречит данным

Как отвечать коротко и уверенно

Хороший ответ можно построить в три шага.

  1. Дайте определение: бизнес-логика - это правила предметной области.
  2. Приведите пример из frontend: валидация формы, доступность действия, расчет предварительной цены, обработка статуса.
  3. Покажите границу: критичные проверки подтверждает backend, а в frontend правила лучше выносить из JSX и тестировать отдельно.

Пример ответа:

Бизнес-логика - это правила продукта: какие действия разрешены, как считаются значения, какие статусы возможны. Во frontend она проявляется в сценариях пользователя, доступности кнопок, локальной валидации и отображении ошибок. Но если правило влияет на деньги, права или сохранение данных, клиентская проверка не должна быть единственной. Я бы вынес повторяемые правила в отдельные функции или доменный слой и покрыл их тестами.

Практический вывод

Для кандидата важнее показать не знание термина, а зрелое разделение ответственности. Если все условия живут в компонентах, код становится хрупким: одно правило меняют в одном месте, забывают в другом, и пользователь получает разные ответы на разных экранах.

Если бизнес-логика названа, вынесена и протестирована, ее легче менять вместе с требованиями. А если backend остается финальной проверкой для критичных действий, приложение не ломает данные и не строит безопасность на доверии к браузеру.

Частые ошибки

Где обычно ошибаются

Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.

  1. 1

    Называть бизнес-логикой любой код

    Если сказать так, границы ответа размоются. Лучше отделять правила предметной области от разметки, сетевых запросов и технической склейки, иначе будет непонятно, что именно вы умеете проектировать.
  2. 2

    Держать правила прямо в JSX

    Условие внутри разметки быстро копируется между экранами и начинает жить в разных версиях. Безопаснее вынести правило в функцию вроде canApplyPromo или canSubmitOrder и использовать ее из компонента.
  3. 3

    Доверять клиентской проверке как защите

    Пользователь может изменить запрос, отключить JavaScript или вызвать API напрямую. Frontend-проверка улучшает UX, но backend все равно должен проверять права, суммы, лимиты и валидность данных.
  4. 4

    Смешивать доменные ошибки с техническими

    Ошибка 500 и правило "промокод уже использован" требуют разного поведения. Если показывать один общий toast, пользователь не поймет, что исправить, а команда потеряет полезную диагностику.
  5. 5

    Не тестировать правила отдельно от интерфейса

    Если правило проверяется только через клики в UI, тесты становятся хрупкими и медленными. Чистую бизнес-функцию проще проверить на крайних случаях: пустая корзина, просроченный промокод, лимит скидки, конфликт статуса.

Follow-up

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

Короткие ответы на вопросы, которыми проверяют понимание границ бизнес-логики во frontend.

Живые ответы

Видео с похожим вопросом

Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.

Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.

Содержание