Слышал ли про подход моделирования состояния Viewmodel через sealed interface

«Слышал ли про подход моделирования состояния Viewmodel через sealed interface» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, это современный подход для управления состоянием в ViewModel. Вместо использования множества LiveData/SateFlow или enum, мы создаем sealed interface/class, который инкапсулирует все возможные состояния экрана.

sealed interface LoginState {
    object Loading : LoginState
    data class Success(val user: User) : LoginState
    data class Error(val message: String) : LoginState
}

class LoginViewModel : ViewModel() {
    private val _state = MutableStateFlow<LoginState>(Loading)
    val state: StateFlow<LoginState> = _state.asStateFlow()

    fun login() {
        viewModelScope.launch {
            _state.value = Loading
            try {
                val user = repo.login()
                _state.value = Success(user)
            } catch (e: Exception) {
                _state.value = Error(e.message ?: "Unknown error")
            }
        }
    }
}

Преимущества:

  • Четкое разделение состояний
  • Исключены невалидные комбинации полей
  • Удобно обрабатывать в UI через when
  • Легко тестировать