Изучение

Выбор правильного пути обработки

Определите, относится ли ошибка к типизированному результату, локальному восстановлению, стандартному распространению или прикладной цепочке обработки.

v0.1.0-dev.1Начальный уровень

Выбор правильного пути обработки

Ark Error Manager не является первым адресатом каждой ошибки. Большая часть приложения продолжает использовать обычные возвращаемые значения, типизированные отрицательные результаты, try/catch и стандартное распространение. Менеджер координирует меньший набор ErrorIncident, достигших границы приложения или явно требующих решения на уровне приложения.

Сначала определите вид результата

СитуацияПравильный путьПричина
Валидация формы отклоняет вводТипизированное состояние валидацииПриложение ожидает такой результат.
Поиск не нашёл элементовПустой доменный результатИсключительной ситуации не возникло.
Чтение необязательного кэша завершилось ошибкой, но Remote-загрузка доступнаЛокальное восстановление; при необходимости — ограниченная диагностикаУ операции есть допустимый запасной путь.
Repository не может завершить операцию, а политика повторов принадлежит вызывающему кодуПередача ошибки выше или типизированный отрицательный результатРешение остаётся у локальной границы.
Необработанная асинхронная ошибка покинула задачу приложенияКорневая ZoneОшибка достигла границы процесса.
Flutter сообщает об ошибке Build, Layout или PaintПривязка FlutterError.onErrorТочка перехвата уже принадлежит Flutter.
Дочерний Isolate завершился с необработанной ошибкойПривязка к порту ошибок IsolateZone не пересекает границу Isolate.
Интеграционный код обязан поглотить исключение и вернуть запасной результат, но всё ещё требуется отчёт или восстановлениеОдин намеренный вызов handleError или captureErrorОбычное распространение намеренно остановлено.

У локального catch есть три честных исхода

dart
try {
  return await client.load();
} catch (error, stackTrace) {
  // Выберите один основной путь:
  // 1. восстановить операцию и вернуть обычный результат;
  // 2. преобразовать ошибку или передать её вызывающему коду;
  // 3. передать менеджеру один раз, потому что эта граница поглощает ошибку.
}

Локальное восстановление

Возвращайте запасной результат, только если домен считает его допустимым. Сам факт выполнения catch не является причиной для глобального отчёта.

Сохранение распространения

Используйте rethrow, если решение остаётся у вызывающего кода или корневой границы. Так сохраняется исходный StackTrace и не создаётся второй путь отчётности.

Намеренная передача

Используйте handleError, если локальная граница должна дождаться завершения отчёта, показа и восстановления. captureError подходит, когда достаточно поставить ErrorIncident в очередь. После передачи не отправляйте ту же ошибку через rethrow в другую настроенную границу без явного идентификатора и политики дедупликации.

Одна ошибка — одна передача на уровне приложения

Дубликаты обычно возникают так:

  1. функция перехватывает и передаёт ошибку менеджеру;
  2. затем снова выбрасывает её;
  3. Zone или обработчик Flutter перехватывает её повторно;
  4. сохранённый предыдущий обработчик Flutter отправляет её ещё в одну систему сбора сбоев.

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

Где доступен ErrorManager

Менеджером владеет код инициализации или корень композиции. Он передаёт обратный вызов только инфраструктурным привязкам, которым менеджер действительно необходим. UseCase, Presenter, Repository, DataSource и виджеты сохраняют существующие контракты ошибок и не разрешают глобальный менеджер.

Поэтому рецепт намеренно обработанной ошибки — исключение для конкретной интеграционной границы, а не шаблон для каждого метода.

Что читать дальше

  1. «Владение и границы» — расположение менеджера.
  2. «Упорядоченная цепочка обработки» — действия после передачи.
  3. Корневая граница Dart или корневая интеграция Flutter — полная сборка.
  4. «Безопасность и конфиденциальность» — обязательный материал перед подключением удалённого ErrorReporter.
ARKTELOS

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