Перейти к основному содержимому

Обработка ошибок

Ошибки — ожидаемое состояние системы. UI должен обрабатывать их предсказуемо, без падения приложения и без утечки технических деталей. Обработка ошибок является неотъемлемой частью архитектуры интерфейса и проектируется на этапе разработки, а не добавляется после релиза.


Общие принципы

MUST

  • Ошибка НЕ приводит к крашу приложения — любая ошибка должна быть перехвачена и обработана на соответствующем уровне.
  • UI корректно обрабатывает ошибочные состояния — для каждого типа ошибки определен паттерн отображения.
  • Обработка ошибок — часть архитектуры интерфейса — проектируется на этапе разработки функционала, а не добавляется постфактум.
  • Ошибки нормализуются в единый формат — UI работает только с унифицированной моделью ошибки.
  • Функции с возможной ошибкой возвращают Result<T, AppError> — вместо неконтролируемых throw / catch. Ошибка явна на каждом шаге от API до UI.

SHOULD

  • Логировать ошибки в систему мониторинга — для анализа и улучшения системы (Sentry, LogRocket и т.д.).
  • Группировать похожие ошибки — чтобы не спамить пользователя множеством одинаковых сообщений.

FORBIDDEN

  • Показывать stack trace пользователю — технические детали не должны быть видны в UI.
  • Отображать raw сообщения из back-end API — сообщения должны быть локализованы и адаптированы.
  • Раскрывать технические детали — внутренние имена переменных, пути к файлам, версии библиотек не должны попадать в пользовательский интерфейс.

Уровни отображения ошибок

Ошибка показывается на уровне UI, соответствующем области влияния. Выбор правильного уровня критичен для UX.

MUST

  • Выбирать минимально достаточный уровень — ошибка должна отображаться на самом узком уровне, который позволяет пользователю понять и исправить ситуацию.
  • Эскалировать уровень только при невозможности локального восстановления — если ошибка не может быть решена на текущем уровне, она поднимается выше.
  • Сохранять контекст при эскалации — пользователь должен понимать, что произошло и почему произошла эскалация.

SHOULD

  • Предоставлять действия для восстановления — кнопка "Повторить", "Обновить", "Вернуться" в зависимости от контекста.
  • Показывать прогресс при повторных попытках — если система автоматически пытается восстановиться.

Примеры распределения по уровням

УровеньГде показываемПримеры ситуацийUI паттерн
ЛокальныйРядом с элементомНеверный формат email, пустое обязательное поле, некорректная датаInline error, Helper text
МодульныйВнутри блока/виджетаОшибка загрузки списка товаров, недоступность виджета статистикиLocal Error Boundary, Empty state с сообщением
ГлобальныйLayout/страница целикомПросроченная сессия (401), отсутствие прав доступа (403), критическая ошибка рендерингаGlobal Error Boundary, Modal, Redirect

Структура документации

Документация по обработке ошибок состоит из следующих разделов: