Решение вопроса № 1 -
Чтобы обработать ответ и ошибку, мне нужно сделать два отдельных обратных вызова. является
Есть ли другой способ, где я могу обработать ответ и ошибку в обратном вызове
вместо создания двух отдельных
В подходе «Чистая архитектура» ваш веб-сервис будет определяться как RemoteDataSource (вероятно, в соответствии с протоколом «DataSource». RemoteDataSource должен сериализовать свой результат в формате класса - если вы можете использовать Kotlin, тогда Sealed Class отличный вариант здесь (если Kotlin не вариант - :( - тогда посмотрите Enums или IntDefs). См. следующее:
/**
* The return state from the Data Layer
*/
sealed class ServiceResult {
data class Success(val list: List<MySerializedObject>) : ServiceResult()
data class Error(val reason: Throwable?) : ServiceResult()
}
Это позволяет передавать одно состояние обратно со слоя данных, через слой домена (где вы можете выполнять дополнительную логику на основе результата) и, наконец, в слой просмотра, где докладчик может включить это как таковой:
when (result) {
is ServiceResult.Success -> {
serializeToViewModel(result) // VM to the Adapter
}
is ServiceResult.Error -> result.reason?.let {
PartialViewState.Error(it) // Can be rendered immediately
}
}
Ваш докладчик может затем вызвать метод рендеринга для представления следующим образом:
... subscribeOn() etc
.subscribe({ view?.render(it) }, { view?.render(ViewState(error = it)) })
Затем метод визуализации вашего представления может выполнять небольшую логику при переключении между отображаемыми состояниями отображения, отображаемым сообщением об ошибке и т. Д.
К вашему сведению, архитектура, которую я использую, в значительной степени опирается на MVI Ханса Дорфмана ... Я настоятельно рекомендую это.