Обясняваме какво е Atomic Design — методология за проектиране на интерфейси, предложена от Брад Фрост през 2013 г., която заимства метафората на атоми, молекули и организми за изграждане на йерархия от UI компоненти. За разлика от страничния подход, при който интерфейсът се проектира екран по екран, Atomic Design разделя UI на най-малките многократно използваеми елементи (атоми) и изгражда от тях по-сложни структури. Според Брад Фрост (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 за изграждане на дизайн системи на клиенти: идентифицираме атомарни компоненти на етапа на проектиране и ги прехвърляме в кодови компоненти на Compose/SwiftUI.
Всяко ниво на Atomic Design решава своя задача и има строга област на отговорност. Атоми — най-малките градивни блокове на интерфейса, които не могат да бъдат разделени допълнително без загуба на смисъл: бутон, текстово поле, икона, етикет, квадратче за отметка. Атомите не съдържат бизнес логика и не зависят от контекста. Те определят основните визуални характеристики: цвят, размер, полета, типография.
Молекули — комбинации от два или повече атома, образуващи прости функционални единици. Поле за въвеждане с етикет и съобщение за грешка — молекула. Карта на продукт с изображение, име и цена — молекула. Молекулите могат да съдържат основна логика (показване/скриване на грешка), но не съдържат бизнес процеси. Молекулите са първото ниво, на което компонентите стават многократно използваеми между различни екрани.
Организми — сложни интерфейсни блокове, съставени от молекули и атоми, които реализират конкретна функция на приложението. Формата за вход (поле за имейл, поле за парола, бутон за изпращане, връзка „забравена парола") — организъм. Хедърът с лого, търсене и навигация — организъм. Организмите могат да съдържат бизнес логика и да имат достъп до API, но само в рамките на своята функция.
Шаблони — скелети на страници, които определят разположението на организмите на екрана без конкретно съдържание. Шаблонът задава мрежата, колоните, зоните за съдържание — wireframe на ниво код. Шаблоните не съдържат данни, само placeholder-и. Те позволяват оценка на структурата на страницата преди запълване със съдържание.
Страници — конкретни екрани на приложението, където шаблонът е запълнен с реални данни. На това ниво се проверява как компонентите изглеждат с реално съдържание (дълги редове, липса на данни, грешки). Страниците са единственото ниво, което крайният потребител вижда. Промените на ниво страници не трябва да засягат атомите, молекулите и организмите — ако компонент трябва да бъде променен, промяната се прави на неговото ниво, а страницата я поема автоматично.
Предимства на Atomic Design се проявяват при мащабиране на интерфейси. Единната библиотека от компоненти гарантира визуална консистентност: бутонът изглежда еднакво на всички екрани, защото е същият атом. Според Брад Фрост (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 за имейл + LabeledTextField за парола + AppButton за изпращане + връзка за възстановяване). Организмите работят с ViewModel чрез Intent функции и могат да съдържат бизнес логика. В SwiftUI подобна йерархия се изгражда чрез @ViewBuilder и персонализирани View структури.
В SwiftUI атомът — персонализирана View структура AppButton, молекулата — поле за въвеждане с етикет на HStack, организмът — форма за вход. Такава структура позволява многократно използване на компоненти на всички екрани — промяна на атом (цвят на бутон) автоматично се прилага към всички екрани. Комбинацията на Atomic Design с дизайн система гарантира консистентност на интерфейса без ръчен контрол на всеки екран.
Често задавани въпроси
Петте нива са препоръка, а не закон. Много дизайн системи (Material Design, IBM Carbon) използват 3 или 4 нива: основни компоненти, съставни компоненти и шаблони. Основно правило — всеки компонент принадлежи към едно ниво и може да бъде използван повторно на следващите нива. Ако виждате, че нивата „молекула" и „организъм" във вашия проект не се различават — обединете ги. Атомите и страниците са единствените задължителни нива.
Атомите се тестват визуално (SnapShot тестове, Compose Preview) — проверява се дали бутонът с зададените свойства се рендерира правилно. Молекулите се тестват като комбинация от атоми — проверява се състоянието (грешка, успех, деактивиран). Организмите изискват интеграционни тестове — проверява се взаимодействието с ViewModel (изпращане на формуляр, зареждане на данни). В IT Sectr използваме Compose Test за Android и XCTest за iOS; за визуално тестване — Paparazzi (Android) и SnapshotTesting (iOS).
Може, но ефективността намалява. Без дизайн система и дизайн токени, атомите нямат единен стил — всеки разработчик създава свои атоми с произволни цветове и полета, което води до визуален безпорядък. Atomic Design и дизайн системата — взаимно допълващи се концепции: Atomic Design задава йерархията, дизайн системата — визуалния език. Препоръчва се внедряването им заедно: първо дизайн токени (цветове, типография, полета), после атоми, след това молекули и организми.
„Атомна зона" — ситуация, при която броят на атомите надхвърля разумните граници (100+) и намирането на необходимия компонент отнема повече време, отколкото писането от нулата. Решение — колокация на атоми по функции: атом, използван само от една функция, се съхранява вътре в тази функция, а не в shared. В shared се поставят само глобални атоми (Button, Text, Input). Според Брад Фрост, колокацията намалява броя на shared атомите с 60–70% без загуба на повторна употреба.
Atomic Design първоначално е методология за проектиране на интерфейси (design), но в съвременната практика се използва и за организиране на код (code). В дизайн инструментите (Figma, Sketch) атомите са библиотечни компоненти; в кода — функции и класове. Методологията не прави разлика между design и code — атомът е един и същ както в макета, така и в имплементацията. В IT Sectr използваме supernova.io за синхронизиране на дизайн атоми и код атоми, което елиминира отклонението между макета и крайния интерфейс.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също