使用MVVM在Android的验证许可优雅的方式

问题描述 投票:2回答:1

所以,我使用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..()网络请求的功能。我认为这是一个锅炉板代码。

  1. 是否有处理验证(不仅令牌验证,但允许在普通)的一些其他的方式?如果是这样,你能告诉我一个例子?
  2. 是不是好做权限验证在Repository水平?
  3. 也许一个更好的办法是在做Interceptor验证?但我没有看到取消如果验证未通过的请求的清洁方式。
android kotlin retrofit2 rx-java2
1个回答
0
投票

更好的方法是保持在仅保持您的视图模型愚蠢地库一级认证。这是非常简单地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 
    }
)
© www.soinside.com 2019 - 2024. All rights reserved.