Использование Kotlin Sealed Classes для маршрутизации на разные экраны - PullRequest
0 голосов
/ 13 февраля 2019

Является ли хорошей идеей создание запечатанных классов как таковых:

sealed class Route<out T: Any> {
    data class ToRoute1<out T : Any>(val data: T) : Route<T>()
    data class ToRoute2<out T : Any>(val data: T) : Route<T>()
    data class ToRoute3<out T : Any>(val data: T) : Route<T>()
}

Таким образом, класс печати Route определит все возможные пункты назначения, к которым текущий экран может «направить».Так, например, «LoginScreen» может иметь следующий запечатанный класс:

sealed class LoginRoute<out T: Any> {
    data class ToSignUp<out T : Any>(val data: T) : LoginRoute<T>()
    data class ToUserDetails<out T : Any>(val data: T) : LoginRoute<T>()
    data class ToSomeOtherPossibleDestination<out T : Any>(val data: T) : LoginRoute<T>()
}

Теперь в ViewModel я могу иметь:

val proceedToDestination = MutableLiveData<Event<LoginRoute>>()

, тогда на виде, я мог бы просто наблюдатьproceedToDestination и сделайте следующее:

viewModel.proceedToDestination.observe(this, Observer { route ->
    route?.consume()?.run {
        when (route) {
            LoginRoute.ToSignUp -> // TODO START SIGNUP
            LoginRoute.ToUserDetails-> // TODO GO TO USER DETAILS SCREEN
            LoginRoute.ToSomeOtherPossibleDestination-> // TODO GO TO OTHER POSSIBLE DESTINATIONS
        }
    }
})

Мой вопрос: является ли это хорошей идеей или хорошей практикой в ​​целом?Заранее спасибо.

Редактировать:

Просто очень хочу оживить это снова и, возможно, найти ответы на некоторые вопросы.

1 Ответ

0 голосов
/ 16 мая 2019

О sealed class - Это нормально.Я загрузил наш Simple-Router подход, который использует похожие маршруты.Вы также можете выполнить сравнительный анализ с довольно интересным маршрутизатором Kompass * 1005. ** на нем - в вашем подходе вы используете Rx/LiveData и позволяете вашему View справиться с этим, но это просто еще один логический слой над ним.

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