Fuente
Затишна Галера | iOSКомпас 🧭1️⃣5️⃣3️⃣ Завдання 153Які переваги typed throws?Доброго здр...
540 Vistas/Alcance
2026-05-06 08:45
Mensaje №2633
#iOSКомпас 🧭1️⃣5️⃣3️⃣ Завдання 153Які переваги typed throws?Доброго здровля мої любі друзі. З вами ваш незмінний ios розробник Сергій з @badlinkschannel.У Swift 6 зʼявився typed throws, але його головна цінність — не в синтаксисі, а в тому, що він дозволяє перетворити помилки на контракт системи.1️⃣ Errors як частина API-контрактуfunc fetchUser() throws(NetworkError) -> User
Це вже не просто «може впасти» - це:➖ явний failure surface➖ контрольований набір помилок➖ можливість будувати predictable flowsФактично, errors стають частиною public API, як return type.2️⃣ Проблема: типізація ≠ архітектураTyped throws не вирішує:➖ як передавати контекст між шарами➖ як не втратити причину помилки➖ як розділити UX / debug / telemetryБільшість кодбаз усе ще мають:throw NSError(...)
або плоскі enum-и без контексту.3️⃣ Layered Error Model (ключова ідея)Помилка - це не значення. Це ланцюг трансформацій через шари системи:[Infrastructure] → [Networking] → [Domain] → [Presentation]
Кожен шар:➖ обгортає помилку➖ додає свій контекст➖ не знищує попередній4️⃣ Базовий протокол системи помилокprotocol SystemError: Error { var userMessage: String { get } var debugMessage: String { get } var underlying: Error? { get }}
Це дає:➖ separation of concerns➖ можливість централізованого логування➖ контроль над тим, що «виходить назовні»5️⃣ Error propagation як pipelinethrow DomainError.userNotFound( underlying: APIError.notFound( underlying: NetworkError.timeout ))
Що важливо:➖ жоден шар не втрачає інформацію➖ можна витягнути будь-який рівень: для retry логіки, для analytics, для feature flags6️⃣ Typed throws + layering = сильна комбінаціяTyped throws:➖ обмежує surface помилокLayering:➖ додає глибину і контекстРазом:➖ compile-time safety➖ runtime observability7️⃣ Наслідки для системиЦе впливає на:Logging / Observability➖ structured error chain➖ нормальний Sentry/Crashlytics контекстRetry / Resilience➖ можна реагувати на конкретний underlying errorClean Architecture➖ чітке розділення між шарами➖ відсутність leakage інфраструктури в UITesting➖ простіше мокати і перевіряти конкретні failure cases8️⃣ Антипатерни➖ Flattened errors➖ Втрата underlying➖ Mixing user/debug messages➖ «Any Error everywhere»🔣 Typed throws - це про контроль поверхні🔣 Layered errors - це про контроль глибиниРазом вони дають:➖ передбачувану систему➖ прозору діагностику➖ масштабовану архітектуру@Zatishna_Galera