Доменные ошибки моделируют как sealed class Result { Success; Error(e) } или Arrow-like Either, чтобы ошибки были частью сигнатуры.
Разбор
- Явный контракт для UI и ViewModel.
- Нет сюрпризов checked/unchecked.
- Комбинация с Flow:
Flow<Result>.
- Исключения оставьте для truly exceptional/bugs.
Итог
Sealed result делает ошибки частью API, а не побочным эффектом.