Лабораторная работа
# Лабораторная №7
Для выполнения скину уже написанный код до данной лабораторной
## Задача
Добавить реализацию Backend Driven UI для дизайн системы и обернуть ее в мапперы. Мапперы должны уметь возвращать вьюшки и их сабвьюшки с помощью модели, получаемой из JSON.
### Ключевые моменты
- BDUI маппер должен принимать в себя некоторую модель, которая может содержать вложенные модели и так до бескончености, описывающие вьюшки, вложенные сабвьюишки и их верстку
- Модель, передаваемая в маппер должна поддерживать декодинг из JSON
- Пример простого JSON:
```json
{
"type": "contentView",
"content": {
"style": "plain",
"backgroundColor: "white"
},
"subviews": [
{
"type": "stackView",
"content": {
"spacing": "s" // Токен спейсинга из дизайн системы, например 16
},
"subviews": [
{
"type": "label",
"content": {
"text": "Привет!"
}
},
{
"type": "button",
"content": {
"text": "Нажми меня",
"action": {
"type": "print",
"context": {
"Кнопка была нажата"
}
}
}
}
]
}
]
}
```
- JSON не обязательно должен быть таким, как в примере, это просто показывает то, какой он может быть
- Ваш конфигуратор должен отражать возможности дизайн системы
- Для простоты верстки можно пользоваться StackView (их можно вкладывать друг в друга), чтобы не делать BDUI верстку
- По схеме подобной модели напрашивается использование Generic'ов и Enum'ов
### Требования
- Маппер должен принимать абстрактную модель и возвращать UIView
- Все вьюшки и сабвьюшки должны быть верно сконфигурированы, согласно дизайн системе (в JSON должны содержаться данные для ViewModel)
- Маппер должен возвращать вьюшку с учетом верстки, чтобы ее можно было сразу разместить на экране
- Вьюшки не должны дополнительно обогощаться и обрабатываться после работы маппера
- Маппер должен работать всегда по одному принципу, без корнер кейсов для конкретных фичей (быть абстрактным)
- Маппер должен быть закрыт за протоколом
## Дополнительно
- Реализовать различные экшены для реакций пользователя (роутинг, релоад экрана и тд)
- Добавить в маппер расширенную дизайн систему (больше 5 вьюшек + контейнеры + констренты и тд) - 2 балла