Как бы спроектировал приложение интернет магазина

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

Ответ

Использовал бы Clean Architecture с слоями:

  • Data (Room, Retrofit, Repositories)
  • Domain (UseCases, Entities)
  • Presentation (MVVM с ViewModel + Compose/XML)

Ключевые компоненты:

  1. Модульная структура (features: auth, catalog, cart)
  2. DI через Hilt/Dagger
  3. Кэширование данных (Room для оффлайн-режима)
  4. Пагинация товаров (Paging 3)
  5. Навигация через Navigation Component

Пример ViewModel для корзины:

class CartViewModel(
    private val getCartItems: GetCartItemsUseCase
) : ViewModel() {
    val state = getCartItems().stateIn(
        scope = viewModelScope,
        started = SharingStarted.WhileSubscribed(),
        initialValue = CartState.Loading
    )
}