---
# System prepended metadata

title: Задачи на Mobius 2022

---

# Задачи на Mobius 2022

## Задача 1

### Вводная часть

Есть некий класс для работы с API, позволяющий получать список товаров и есть UIViewController, отображающий этот список в таблице.

### Задание

Задача спроектировать отказоустойчивую систему, позволяющую делать 5 попыток получения информации с сервера `URL1`, в случае провала переподключаться на резервный сервер `URL2` на котором возможны теже 5 попыток, и далее на `URL3` при отказе`URL2`. В случае, если  последний резервный сервер не ответил, отображать информацию из JSON файла, размещенного в ресурсах приложения.

### Результат

Предоставить набросок такой системы в любом удобом и понятном виде.

### Решение

Однозначного решения нет, подразумевает и подталкивает к обсуждению предложенного решения.

Система должна быть гибкой и расширяемой, необходимо использование паттернов Композиция и Стратегия.

Как контр-аргумент к плохой системе, да и к хорошей, предложить рассказать, как можно исправить ситуацию при отсутствии сети, чтобы не ждать все 15 попыток доступа по URL, а сразу получать данные из JSON

## Задача 2

### Вводная часть

Есть некоторое приложение, которое состоит из 10 экранов, множества сервисов и бизнес-логики, работает с БД и сетью. Архитектура приложения не имеет значение.

### Задание

Задача спроектировать систему сбора логов и аналитики для данного приложения. Логи и статистика должны отправляться на сервер. Обеспечить возможность сохранять записи, при отсутствии сети и отправки после её появления без использования сторонних фреймворков.

### Решение

Однозначного решения нет, подразумевает и подталкивает к обсуждению предложенного решения.

Должно быть решение без использования Синглтонов и прочих антипаттернов. Нужно рассказать как такое возможно реализовать стандартными средствами Swift. 

Возможно в дискуссии накидывать предложения о том, что если логирование заменят на сохранение на диск или в БД или в системный журнал. Как этим управлять и как иметь возможность переключать методы логирования без переделывания всего приложения.