Какие сущности используются в Data и Presentation слоях

«Какие сущности используются в Data и Presentation слоях» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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())
        }
    }
}