в репозиториях?
1) Model + exception
2) Result<Model> котлиновский
3) Either<Throwable, Model> из arrow
4) Своя обертка? Какая и почему?
У меня на одном проекте 2 вариант, на втором 4 вариант 4 вариант это силед класс с позитивным вариантом и двумя вариантами ошибки, исходя из которых нужно юай по разному рисовать :) Какой-то разницы в использовании обеих вариантов не заметил, просто так исторически сложилось и конкретный вариант лучше ложился под архитектуру целого приложения
Я за объединение 1 и 2-3 вариантов. Result\Either используются для обозначения результата функции, где могут быть как успешные, так и негативные варианты. Например, пользователь логинется. Успешно — данные верные, неуспешно — ошибка в пароле. Это не ошибка системы, это ошибка приложения, которую надо обработать. Выброс эксепшенов же используется для чего-то действительно непредвиденного или ломающего флоу. Например, каким-либо образом поломалась схема БД у пользователя. Это ситуация в которой невозможно отработать нормально. Но выброс эксепшенов тут дело редкое, обычно они исходят от системы. И в таком случае совсем необязательно использовать Throwable, т.к. все ошибки это что-то локальное для приложения. Хоть строку, хоть енам, хоть силды передавай. Точно считаю 1 вариант плохим в реалиях котлина, т.к. нет checked exceptions, а значит очень легко обосраться не вставив где надо try\catch. А так 2-4 варианты обычно одно и тоже выходит.
Обсуждают сегодня