Вопрос проверяет знание основных архитектурных слоев и ответственности каждого компонента.
Обычно выделяют три слоя: presentation, domain и data. Presentation управляет состоянием UI, domain содержит бизнес-логику и use cases, data отвечает за получение данных из сети или базы. Такое разделение делает код понятным, тестируемым и расширяемым. Каждый слой зависит только от слоя ниже его.
При создании приложения с сетевыми запросами важно разделить логику на независимые слои, чтобы облегчить поддержку и тестирование.
Этот слой отвечает за отображение данных и реакцию на действия пользователя.
Типичные компоненты:
View (Activity, Fragment, Compose UI)
ViewModel
State management (LiveData, Flow, StateFlow)
Главная задача — управлять UI-состоянием и вызывать соответствующие use cases.
Пример:
viewModelScope.launch {
val items = getItemsUseCase()
state.value = items
}
Это центр приложения, содержащий бизнес-логику.
Что включает:
Use cases / Interactors — операции, которые описывают конкретное действие.
Entities — доменные модели.
Интерфейсы репозиториев — абстракции для взаимодействия с данными.
Особенности:
Не зависит от Android Framework.
Легко тестируется.
Слой отвечает за реальные источники данных:
сетевые запросы (Retrofit, Ktor)
локальную базу данных (Room)
кэш и преобразование DTO ↔ Domain моделей
Структура обычно включает:
DataSource (remote/local)
Репозитории, реализующие интерфейсы domain слоя
Мапперы моделей
Последовательность выглядит так:
UI → ViewModel → UseCase → Repository → DataSource → Network
UI ← ViewModel ← UseCase ← Repository ← DataSource ← Network
Это обеспечивает прозрачное движение данных и изоляцию каждого слоя.
Трёхслойная архитектура делает проект расширяемым и тестируемым. Presentation отображает данные, domain описывает логику, data извлекает данные. Это рекомендуемый подход для большинства Android-проектов, особенно с сетевыми вызовами.