MVVM с веб-сервисом и репозитой. Лучший вариант? - PullRequest
0 голосов
/ 14 июня 2019

Я занимаюсь разработкой архитектуры для приложения для Android и проверяю документ

https://developer.android.com/jetpack/docs/guide

Но, пытаясь протестировать код руководства по архитектуре Android, это совсем не правильно, потому что веб-сервис будет асинхронным, и обратное предложение будет вызываться до того, как веб-сервис закончится.

class UserRepository {
   private val webservice: Webservice = TODO()
   fun getUser(userId: String): LiveData<User> {
       // This isn't an optimal implementation. We'll fix it later.
       val data = MutableLiveData<User>()
       webservice.getUser(userId).enqueue(object : Callback<User> {
           override fun onResponse(call: Call<User>, response: Response<User>) {
               data.value = response.body()
           }
           // Error case is left out for brevity.
           override fun onFailure(call: Call<User>, t: Throwable) {
               TODO()
           }
       })
       return data
   }
}


class UserProfileViewModel @Inject constructor(
   savedStateHandle: SavedStateHandle,
   userRepository: UserRepository
) : ViewModel() {
   val userId : String = savedStateHandle["uid"] ?:
          throw IllegalArgumentException("missing user id")
   val user : LiveData<User> = userRepository.getUser(userId)
}

В моей архитектуре у нас есть дополнительный слой "хранилище"

Как лучше всего сообщить результат работы асинхронного веб-сервиса?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...