Перейти к содержанию

🗒 Задача

Дизайнер предоставил макет Android-приложения:

https://www.figma.com/file/89K5JomHGyIkUFUaBKRBXi/RecipesApp?type=design&node-id=1%3A181&mode=design&t=DsOaqqRfAeCTY2eN-1

Для представленных экранов спроектируй следующие сущности для хранения данных:

  • Категория рецепта

  • Рецепт

  • Ингредиент

❌ Ошибки

  • в свойствах описывают элементы интерфейса

  • в свойствах перечисляется список свойств какой-то сущности, которые можно вынести в отдельный класс

✏️ Комментарии

Наша задача как архитектора здесь – спроектировать классы для хранения данных. То есть создаем только модельки для хранения данных.
Ингредиенты (тут внимательнее – это список новых объектов с типом "Ингредиент")
Кнопки давай вообще уберем, чтобы не отвлекали внимание. Это стандартные компоненты и отдельные кастомные классы делать для них не придется.
Наша задача как архитектора здесь – спроектировать классы для хранения данных, а не элементов UI.
Окей, но достаточно было только сгенерировать модели данных (классы для сущностей)
Фигурные скобки можно опускать, если тело класса пустое
Класс – это шаблон будущего конкретного объекта. Это не переменная со списком объектов. Название сущности должно быть в единственном числе.
Обычно для простых моделек мы используем списки, но все зависит от дополнительного контекста. Главное, что тут корректно отображен сет или лист из объектов.
В рецепте есть еще метод приготовления, который можно было бы представить в виде простого списка строк. 
Предлагаю для объекта категории и рецепта еще добавить свойство imageUrl. Оно будет хранить название или ссылку на изображение.

🧾 Решение

// обычные классы тоже ок (data будут в курсе дальше)
// это реальные модели из https://stage.androidsprint.ru/

data class Category(
    val id: Int,
    val title: String,
    val description: String,
    val imageUrl: String,
    val recipes: List<Recipe>,
)

data class Recipe(
    val id: Int,
    val title: String,
    val ingredients: List<Ingredient>,
    val method: List<String>,
    val imageUrl: String,
)

data class Ingredient(
    val quantity: String,
    val unitOfMeasure: String,
    val description: String,
)