Проектирование Middle Мобильный system design обновлено

Мобильный system design: каталог и корзина маркетплейса

Вопрос

Спроектируйте клиент маркетплейса: главная витрина, каталог с фильтрами и поиском, карточка товара, корзина, синхронизация корзины между устройствами.

Коротко

Главная витрина приходит с сервера как список блоков (баннер, карусель, подборка) с данными; клиент рендерит известные типы из своей дизайн-системы и пропускает неизвестные, поэтому старые версии не ломаются. Ответ кешируется и показывается сразу при старте.

Что должно быть в решении

  1. 1
    Требования: витрина меняется без релиза, поиск с подсказками, корзина офлайн и между устройствами
  2. 2
    Витрина: server-driven блоки с фолбэком для неизвестных типов
  3. 3
    Каталог: курсорная пагинация, фильтры в URL-подобном состоянии, кеш результатов
  4. 4
    Поиск: debounce, отмена устаревших запросов, история поиска локально
  5. 5
    Корзина: локальная копия, операции через outbox, слияние с серверной при входе
  6. 6
    Узкие места: картинки, цены и остатки (свежесть), deep links на товар

Что спросит интервьюер

  • Как слить гостевую корзину с корзиной аккаунта при входе?
  • Как показывать цену, если она могла измениться?

Разбор

Главная витрина приходит с сервера как список блоков (баннер, карусель, подборка) с данными; клиент рендерит известные типы из своей дизайн-системы и пропускает неизвестные, поэтому старые версии не ломаются. Ответ кешируется и показывается сразу при старте.

Каталог: запрос с фильтрами и курсором, состояние фильтров описано данными (его можно восстановить и передать ссылкой). Поиск: debounce 300 мс, отмена предыдущего запроса, подсказки с сервера и локальная история.

Карточка товара: базовые данные из списка показываем мгновенно, детали догружаем. Цена и наличие обновляются при открытии и обязательно при оформлении: сервер пересчитывает итог.

Корзина: локальная база и операции «добавить/изменить/удалить» в outbox с идемпотентностью. Для гостя корзина только локальная; при входе клиент отправляет её, и сервер сливает с корзиной аккаунта (суммируя количество или беря максимум, по правилам продукта). Изменения с других устройств приходят при открытии корзины и по тихому push.

Deep links ведут на товар, категорию и акцию через общий роутер.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.