Изучение
Владение и границы
Один ErrorManager в корне композиции без Service Locator и зависимости в каждом функциональном объекте.
Владение и границы
Корень композиции приложения создаёт один ErrorManager, настраивает роли его политики и подключает принадлежащие приложению границы среды выполнения. У менеджера нет статического текущего экземпляра; его не надо разрешать как зависимость внутри функции.
Корень композиции приложения
├── корневая Zone
├── привязки дочерних Isolate
├── необязательная Flutter-привязка
└── ErrorManager
├── ErrorClassifier и ErrorContextProvider
├── ErrorPolicy и ErrorSanitizer
└── ErrorReporter, ErrorPresenter и ErrorRecoveryController
UseCase, Presenter, Repository, DataSource и сервисы продолжают использовать обычное распространение ошибок. Ожидаемые неуспешные результаты остаются в их типизированном API. До корневой границы доходит исключительная ситуация, которую не удалось корректно обработать локально.
Три корректных исхода локального перехвата
После catch код должен выбрать один вариант:
- восстановиться локально и не создавать глобальный
ErrorIncident; - преобразовать или повторно выбросить ошибку;
- намеренно передать её один раз через
handleErrorилиcaptureError.
Внедрение менеджера во все объекты скрывает это решение, связывает бизнес-код с инфраструктурой среды выполнения и повышает риск повторной отчётности.
Централизованный — не глобальный
Централизованное владение означает, что цепочкой обработки управляет один объект приложения. Глобальный доступ позволил бы произвольному коду получать этот объект из любой точки. Ark Error Manager реализует первую модель и намеренно исключает вторую.