Является ли хорошей идеей создание запечатанных классов как таковых:
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
}
}
})
Мой вопрос: является ли это хорошей идеей или хорошей практикой в целом?Заранее спасибо.
Редактировать:
Просто очень хочу оживить это снова и, возможно, найти ответы на некоторые вопросы.