Ответ
Data Layer:
- Repository: центральный компонент, абстрагирующий источники данных (локальные/удалённые)
- DataSource: интерфейсы/классы для работы с конкретными источниками (API, БД)
- DTO (Data Transfer Object): модели данных для API/сетевых запросов
- DAO (Data Access Object): интерфейсы для работы с локальной БД (Room)
Presentation Layer:
- ViewModel: хранит UI-данные, переживает конфигурации
- LiveData/StateFlow: observable-контейнеры для данных
- UI State: immutable-классы, описывающие состояние экрана
- UseCase: бизнес-логика, переиспользуемая между ViewModel
Пример ViewModel:
class UserViewModel(repo: UserRepository) : ViewModel() {
private val _state = MutableStateFlow<UserState>(UserState.Loading)
val state: StateFlow<UserState> = _state
init { loadUser() }
private fun loadUser() {
viewModelScope.launch {
_state.value = UserState.Success(repo.getUser())
}
}
}