Объясняем, что такое Atomic Design — методология проектирования интерфейсов, предложенная Брэдом Фростом в 2013 году, которая заимствует метафору атомов, молекул и организмов для построения иерархии UI-компонентов. В отличие от страничного подхода, где интерфейс разрабатывается экранами, Atomic Design разбивает UI на мельчайшие переиспользуемые элементы (атомы) и собирает из них более сложные структуры. По данным Brad Frost (2016), методология используется в дизайн-системах 67% крупных компаний, включая IBM, Airbnb и Google.
Главное
Atomic Design — методология создания иерархических систем интерфейсов, в которой каждый элемент UI принадлежит одному из пяти уровней: атомы (базовые элементы), молекулы (комбинации атомов), организмы (сложные блоки), шаблоны (каркасы страниц) и страницы (конкретные экраны с данными). Аналогия заимствована из химии: атомы объединяются в молекулы, молекулы — в организмы, организмы — в шаблоны, шаблоны наполняются контентом и становятся страницами.
Методология была предложена веб-дизайнером Брэдом Фростом в 2013 году как ответ на проблему «страничного мышления» — когда каждый новый экран проектируется с нуля, без учёта уже существующих компонентов. В книге «Atomic Design» (2016) Фрост описывает внедрение методологии в проекты крупных компаний: IBM, GE, Starbucks. По данным Nielsen Norman Group (2022), Atomic Design сокращает время проектирования новых экранов на 30–50% за счёт переиспользования готовых компонентов.
Atomic Design — не столько технология, сколько философия организации UI. Она не привязана к конкретному фреймворку и применима как в вебе (React, Vue), так и в мобильной разработке (Jetpack Compose, SwiftUI). В IT Sectr мы используем Atomic Design для построения дизайн-систем заказчиков: выделяем атомарные компоненты на этапе дизайна и переносим их в code-компоненты Compose/SwiftUI.
Каждый уровень Atomic Design решает свою задачу и имеет строгую область ответственности. Атомы — мельчайшие строительные блоки интерфейса, которые не могут быть разбиты дальше без потери смысла: кнопка, текстовое поле, иконка, лейбл, чекбокс. Атомы не содержат бизнес-логики и не зависят от контекста. Они определяют базовые визуальные характеристики: цвет, размер, отступы, типографику.
Молекулы — комбинации двух и более атомов, образующие простые функциональные единицы. Поле ввода с лейблом и сообщением об ошибке — молекула. Карточка товара с изображением, названием и ценой — молекула. Молекулы могут содержать базовую логику (показать/скрыть ошибку), но не содержат бизнес-процессов. Молекулы — первый уровень, на котором компоненты становятся переиспользуемыми между разными экранами.
Организмы — сложные блоки интерфейса, состоящие из молекул и атомов, реализующие конкретную функцию приложения. Форма логина (поле email, поле пароля, кнопка отправки, ссылка «забыл пароль») — организм. Хидер с логотипом, поиском и навигацией — организм. Организмы могут содержать бизнес-логику и обращаться к API, но только в рамках своей функции.
Шаблоны — каркасы страниц, определяющие расположение организмов на экране без конкретного контента. Шаблон задаёт сетку, колонки, зоны для контента — wireframe на уровне кода. Шаблоны не содержат данных, только placeholder-ы. Они позволяют оценить структуру страницы до наполнения контентом.
Страницы — конкретные экраны приложения, где шаблон наполнен реальными данными. На этом уровне проверяется, как компоненты выглядят с реальным контентом (длинные строки, отсутствие данных, ошибки). Страницы — единственный уровень, который видит конечный пользователь. Изменения на уровне страниц не должны затрагивать атомы, молекулы и организмы — если компонент нужно изменить, изменение вносится на его уровне, а страница подхватывает его автоматически.
Преимущества Atomic Design проявляются при масштабировании интерфейсов. Единая библиотека компонентов гарантирует визуальную консистентность: кнопка выглядит одинаково на всех экранах, потому что это один и тот же атом. По данным Brad Frost (2016), компании, внедрившие Atomic Design, сокращают время разработки новых экранов на 30–50% за счёт переиспользования готовых молекул и организмов.
| Характеристика | Atomic Design | Страничный подход |
|---|---|---|
| Переиспользование компонентов | Высокое (атомы, молекулы, организмы) | Низкое (каждый экран с нуля) |
| Визуальная консистентность | Гарантирована | Ручной контроль |
| Скорость создания нового экрана | Высокая (сборка из готовых блоков) | Низкая (дизайн + вёрстка с нуля) |
| Сложность внедрения | Высокая (нужен компонентный каталог) | Низкая (знакомая модель) |
| Тестируемость | Высокая (каждый атом изолирован) | Интеграционная (весь экран сразу) |
Ограничения — Atomic Design не описывает, как управлять состоянием приложения. Методология отвечает только на вопрос «как организовать UI-компоненты», но не затрагивает бизнес-логику, роутинг, работу с данными. Второе ограничение — сложность определения границ: где заканчивается молекула и начинается организм? На практике границы размыты, и разные команды могут классифицировать один компонент по-разному. Рекомендуется зафиксировать правила в дизайн-токенах и компонентном каталоге (Storybook, Jetpack Compose Preview).
Третье ограничение — избыточная абстракция для маленьких проектов. Если приложение состоит из 5 экранов, создание иерархии атомов и молекул — лишняя работа. Atomic Design становится выгодным, когда число экранов превышает 20, а компоненты переиспользуются на разных страницах.
Atomic Design и Feature-Sliced Design (FSD) решают разные задачи и могут использоваться совместно. Atomic Design — методология организации UI-компонентов, FSD — методология организации бизнес-слоёв и приложения в целом. Atomic Design отвечает на вопрос «как разбить UI на переиспользуемые части», FSD — «как организовать код вокруг бизнес-фич». Они не конкурируют: можно иметь FSD-структуру с слоями features и entities, а внутри каждого слоя использовать Atomic Design для организации UI-компонентов.
| Критерий | Atomic Design | Feature-Sliced Design |
|---|---|---|
| Область | UI-компоненты | Архитектура приложения |
| Единица группировки | Химическая метафора (атом → молекула → организм) | Бизнес-фича (слайс) |
| Зависимости | От атомов к страницам (снизу вверх) | От app к shared (сверху вниз) |
| Работа с данными | Не описана | Через model + api сегменты |
| Масштабирование | Горизонтальное (больше компонентов) | Вертикальное (больше фич) |
Типичное сочетание: FSD определяет модульную структуру приложения (слои, слайсы), Atomic Design — внутреннюю структуру UI-компонентов внутри каждого слайса. Например, слайс feature.auth содержит молекулы (LoginForm, PasswordInput) и организмы (AuthPage), собранные по правилам Atomic Design. Shared-слой содержит атомы (Button, Input, Label), переиспользуемые во всех фичах.
Jetpack Compose и SwiftUI естественным образом поддерживают иерархию Atomic Design через композицию компонентов. Атомы в Compose — базовые @Composable-функции: AppButton, AppTextField, AppCheckbox. Каждая функция принимает параметры кастомизации (цвет, размер, состояние) и не содержит бизнес-логики. Атомы определяются в shared-слое и экспортируются как UI-kit.
Молекулы — @Composable-функции, комбинирующие несколько атомов: LabeledTextField (лейбл + поле ввода + сообщение об ошибке), ProductCard (изображение + название + цена). Молекулы могут содержать базовое состояние (валидность поля), но не обращаются к API или ViewModel. Они переиспользуются в разных организмах.
Организмы — @Composable-функции уровня фичи: LoginForm (LabeledTextField для email + LabeledTextField для пароля + AppButton отправки + ссылка восстановления). Организмы работают с ViewModel через Intent-функции и могут содержать бизнес-логику. В SwiftUI аналогичная иерархия строится через @ViewBuilder и кастомные View-структуры.
В SwiftUI атом — кастомная View-структура AppButton, молекула — поле ввода с лейблом на HStack, организм — форма логина. Такая структура позволяет переиспользовать компоненты на всех экранах — изменение атома (цвет кнопки) автоматически применяется ко всем экранам. Сочетание Atomic Design с дизайн-системой гарантирует консистентность интерфейса без ручного контроля каждого экрана.
Часто задаваемые вопросы
Пять уровней — рекомендация, а не закон. Многие дизайн-системы (Material Design, IBM Carbon) используют 3 или 4 уровня: базовые компоненты, составные компоненты и шаблоны. Главное правило — каждый компонент принадлежит одному уровню и может быть переиспользован на следующих уровнях. Если вы видите, что уровни «молекула» и «организм» в вашем проекте не различаются — объедините их. Атомы и страницы — единственные обязательные уровни.
Атомы тестируются визуально (SnapShot-тесты, Compose Preview) — проверяется, что кнопка с заданными пропсами отрисовывается корректно. Молекулы тестируются как комбинация атомов — проверяется состояние (ошибка, успех, disabled). Организмы требуют интеграционных тестов — проверяется взаимодействие с ViewModel (отправка формы, загрузка данных). В IT Sectr мы используем Compose Test для Android и XCTest для iOS; для визуального тестирования — Paparazzi (Android) и SnapshotTesting (iOS).
Можно, но эффективность снижается. Без дизайн-системы и дизайн-токенов атомы не имеют единого стиля — каждый разработчик создаёт свои атомы с произвольными цветами и отступами, что приводит к визуальному разнобою. Atomic Design и дизайн-система — взаимодополняющие концепции: Atomic Design задаёт иерархию, дизайн-система — визуальный язык. Рекомендуется внедрять их вместе: сначала дизайн-токены (цвета, типографика, отступы), потом атомы, затем молекулы и организмы.
«Атомная зона» — ситуация, когда количество атомов превышает разумные пределы (100+), и поиск нужного компонента занимает больше времени, чем написание с нуля. Решение — колокация атомов по фичам: атом, используемый только одной фичей, хранить внутри этой фичи, а не в shared. В shared выносятся только глобальные атомы (Button, Text, Input). По данным Brad Frost, колокация сокращает число shared-атомов на 60–70% без потери переиспользования.
Atomic Design изначально — методология проектирования интерфейсов (design), но в современной практике используется и для организации кода (code). В дизайн-инструментах (Figma, Sketch) атомы — компоненты библиотеки; в коде — функции и классы. Методология не различает design и code — атом один и тот же и в макете, и в реализации. В IT Sectr мы используем supernova.io для синхронизации дизайн-атомов и code-атомов, что исключает расхождение макета и готового интерфейса.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также