所以,我使用MVVM架构库模式,使不同的API调用。我有一个名为X库,在那里我有不同的相关API调用。
之前,这些调用的是由,我愿做验证。如果顺利进行,只有网络请求应作出。
fun getSomethingX(data: Data): Single<Data> {
return if (validation(data)) {
service.getSomethingX()
.onErrorResumeNext(...)
.map { ... ->
...
}
} else {
Single.just(null)
}
}
fun getSomethingY(data: Data): Single<Data> {
return if (validation(data)) {
service.getSomethingX()
.onErrorResumeNext(...)
.map { ... ->
...
}
} else {
Single.just(null)
}
}
正如你可以看到我可能有许多所谓的getSomething..()
网络请求的功能。我认为这是一个锅炉板代码。
Interceptor
验证?但我没有看到取消如果验证未通过的请求的清洁方式。更好的方法是保持在仅保持您的视图模型愚蠢地库一级认证。这是非常简单地Kotlin’s Function literals with receiver。
在你的仓库
fun getSomethingX(
data: Data,
onSuccess: (Single<Data>) -> Unit,
onError: (String) -> Unit
) {
if (validation(data)) {
// Do the network call
onSuccess(//pass result)
} else onError(“Invalid data”)
}
在您的视图模型
repository.getSomethingX(
data,
onSuccess = {
//it will give you Single<Data>
//Update the value
},
onError = {
//Emit error to view
}
)