itmo_conspects

Лекция 5. Дизайн-система и интерфейс, управляемый бэкендом

Дизайн-система

Дизайн-система - это система, которая помогает создать единый и последовательный дизайн для всех устройств

Дизайн-система представляет из себя набор правил и компонентов, таких как цветовая схема, типография, готовые макеты из элементов и их компоновка

По сути, дизайн-система выступает общим языком между дизайнерами и разработчиками - она помогает договориться о том, как должен выглядеть и вести себя интерфейс, чтобы разные части приложения не ощущались собранными из несвязанных между собой экранов

Разберем, для чего нужны эти компоненты:

Дизайн-система должна быть:

Дизайн-система позволяет:

В Android-разработке дизайн-система часто выражается в виде темы приложения, набора стилей, токенов и библиотеки компонентов

Для создания дизайн-системы можно воспользоваться такими инструментами: Sketch, Figma, Adobe XD, Lunacy и так далее

Интерфейс, управляемый бэкендом

Сейчас мобильные приложения можно разделить на два типа:

У тонкого клиента есть ряд преимуществ: бизнес-логика менее связана с версией клиента, изменения можно выкатывать быстрее, а часть поведения приложения проще контролировать централизованно. Но у такого клиента обычно сильнее зависимость от сети и сервера

Поэтому появляется архитектура интерфейса, управляемого бэкендом (Backend Driven UI или Server Driven UI), - при таком подходе интерфейс приложения строится на основе данных, полученных с сервера

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

Обычно это выглядит так:

  1. Клиент отправляет запрос на сервер
  2. Сервер возвращает схему экрана, например, в формате JSON
  3. Клиент разбирает ответ и сопоставляет каждый тип блока с локальным компонентом интерфейса
  4. На экране строится итоговый интерфейс

Например, сервер может прислать описание такого вида:

{
  "screen": "profile",
  "components": [
    { "type": "text", "value": "Профиль" },
    { "type": "image", "url": "https://example.com/avatar.png" },
    { "type": "button", "title": "Редактировать" }
  ]
}

Тогда клиент должен уметь понять, что text нужно отрисовать как текстовый элемент, image как изображение, а button как кнопку. То есть на клиенте остается универсальный движок отрисовки и набор поддерживаемых компонентов

Преимущества интерфейса, управляемого бэкендом:

Однако существуют недостатки:

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

Поэтому на практике часто используют гибридный подход: критически важные и сложные экраны остаются нативными, а более простые и быстро меняющиеся части приложения управляются сервером