Ответ
В Presentation слое Clean Architecture обычно выделяют следующие сущности:
-
View (UI) - Activity, Fragment, Composable и т.д. Отвечает за отображение данных и взаимодействие с пользователем. Должен быть максимально "тупым".
-
ViewModel - хранит UI-логику и состояние экрана. Коммуницирует с Domain слоем через UseCases. Пример:
class MyViewModel(
private val getDataUseCase: GetDataUseCase
) : ViewModel() {
private val _state = MutableStateFlow<State>(State.Loading)
val state: StateFlow<State> = _state.asStateFlow()
fun loadData() {
viewModelScope.launch {
_state.value = State.Loading
_state.value = try {
State.Success(getDataUseCase.execute())
} catch (e: Exception) {
State.Error(e.message)
}
}
}
}
-
State - immutable классы данных, описывающие состояние UI.
-
UI Events - sealed классы/интерфейсы для обработки пользовательских действий.
-
Mappers - преобразуют Domain модели в Presentation модели.