Комментарии 15
Допустим, вы делаете запрос к серверу, который вернет либо данные, либо ошибку, что данные не найдены. Оба состояния — это бизнес логика, поэтому приходят с HTTP Result 200.
В моем случае, они обернуться в Reaction.Success и Reaction.Error. В вашем — придется делать дополнительный класс для передачи данных, либо кидать Exception на ошибку от сервера…
Вот из-за такого приходится велосипедить свою реализацию промисов.
Как пример можно посмотреть на реализацию класса Result из корутин пакета.
А почему бы не использовать исключения для ошибок?
Я имел ввиду, почему не делать, чтоб функция возвращала данные в случае успеха и кидала исключение при ошибке?
1) Думаю, что результат метода должен быть один, а так же он должен быть ожидаемым.
2) Если добавить интерактор, и логика приложения будет сложнее, например будет основываться на ошибке из репозитория, с вашим подходом будет сложнова-то ее реализовать.
По сути, единственное, что меняется, в случае использования reaction, result, вместо try-catch — это что ошибка будет трансформироваться в другой класс, что по сути, затрудняет понимание происходящего, а количество кода не уменьшает. Как использовалась куча условий для обработки ошибки, так и будет. Только в случае с try-catch, мы имеем более логичный результат — это будут либо чистые данные, либо ошибку, которую мы и так ожидаем.
Использование лишних библиотек для обертки результата приводит только повышению порога вхождения в проект и не приносит никаких плюсов.
Почитайте статью Елизарова — Kotlin and Exceptions.
Суть в том, что исключения не совсем тру. В вашем случае ошибка — это не исключение, а результат, пусть и отрицательный.
https://github.com/kittinunf/Result вот ещё хороший аналог.
возвращает Reaction [Success, Error]. Вы тупо мапите его в свой класс
вида State [Progress, Success, Error] что бы воткнуть такой же when где-то
в подписке на LiveData. В чем прикол?
А какой код у вас в DataSource?
fun getData(): Reaction<String> = Reaction.on { dataSource.getData() }
, где dataSource.getData() просто возвращает строку.
Зайдите на https://github.com/taptappub/Reaction, там есть все описания и примеры
Reaction — обработка результатов методов в Kotlin