20 июня 2024

Блог

Разработка

Декларативный и императивный подходы к мобильной разработке приложений

В этой статье поговорим о декларативном подходе и императивном, сравним их и разберем на собственных реальных примерах

 

Мобильное приложение - полезный и нужный для бизнеса инструмент (а почему - рассказываем подробно здесь). Мы очень давно занимаемся разработкой таких приложений. C 2010 года мы следим за трендами и возможностями, которые дают бизнесу применение мобильных технологий. За эти долгие годы, кажется, было всё. В самом начале создавали приложения под первые модели устройств, таких, как iPhone 3G, первые Windows Phone и самые ранние модели с Android. Пробовали некогда модные средства кроссплатформенной разработки, Xamarin, Titanium и даже PhoneGap.

О самом разном опыте в области мобильной разработки мы уже рассказывали. Например, про собственное решение - дебаг-меню, внедрение MobSF или UI-тестирование мобильных приложений. В этой статье речь пойдет о другом.

Несколько месяцев назад мы стартовали проект, полностью используя новые мобильные фреймворки. В коммерческой разработке под iOS команда применила SwiftUI. А разработчики Android перешли на Jetpack Compose. О том, что это за фреймворки и как переход отразился на бизнес-результате, мы и хотим рассказать.

Назвать их совсем новыми нельзя. SwiftUI был представлен в июне 2019 года. Google шёл параллельно и открыл миру свой фреймворк в 2020-м. Презентации были многообещающими, но когда можно переключить разработку на новые рельсы? Это всегда вопрос. Бизнес-заказчик заинтересован в том, чтобы как можно быстрее получить гарантированный результат. Поэтому обычно компании-разработчики выбирают уже знакомые и проверенные инструменты для создания приложений. Как при этом оставаться в тренде технологий?

Императивный и декларативный подходы

Начать стоит с того, что нового привносят в жизнь мобильного разработчика фреймворки SwiftUI и Jetpack Compose. Основное – это новые подходы к разработке пользовательского интерфейса. На смену императивному приходит декларативный подход разработки UI. Императивный подход использует последовательность утверждений, меняющих состояние программы для достижения результата. При декларативном же подходе описывается результат, которого необходимо достичь. При этом без указания шагов, необходимых для его получения.

Долгие годы в мобильной разработке превалировал императивный подход. Суть его в том, что программисты описывали операции, при выполнении которых достигалось желаемое состояние интерфейса. В кругах мобильной разработки стандартом были использование UIKit и верстка через XML в Android. Эти технологии как раз отражали императивный подход и были привычными большинству мобильных разработчиков.

SwiftUI в iOS и Jetpack Compose в Android относятся к декларативному способу разработки пользовательских интерфейсов. Декларативный подход в разработке UI описывает желаемое состояние интерфейса. Программист «декларирует», как должен выглядеть и работать интерфейс приложения. Преимущества декларативного подхода включают чистоту кода, более простую отладку и возможность повторного использования компонентов.

Jetpack Compose

Jetpack Compose — современный набор инструментов для создания UI. С приходом этой технологии программисты получили возможность использовать Kotlin как единый язык программирования для всего приложения. Это позволило избавиться от XML-файлов для описания схем пользовательского интерфейса, что в свою очередь решило ряд проблем с установкой всех правил внутри файла-описания.

За счет внутренней реализации логики работы компонентов произошло ускорение разработки. Сократилось количество шаблонного кода, который использовался в императивном UI для работы с представлениями и логикой. Значительно упростилось создание анимаций с состояниями, так как теперь параметризацию можно делать в среде выполнения. Еще одно преимущество заключается в повышении производительности при запуске View, так как макеты компилируются подобно остальной части приложения и не требуют расширения. После полного перехода на Compose уменьшаются как размер приложения, так и время его сборки.

Что мы получили от перехода на эту технологию:

  • JP – это современный стек разработки на ближайшие 3-5 лет

Переход на эту технологию позволит избежать нарастания технического долга.

  • Уменьшение бойлерплейт кода

Сокращение объемов шаблонного кода позволило сократить время на разработку необходимого функционала.

  • Получаем современные инструменты проверки разрабатываемого UI

Наличие инструментов preview, interactive preview положительно влияет на скорость разработки.

  • Упрощение работы с анимациями

Благодаря animation preview можно быстро разработать и отладить микроанимации. Как следствие получаем красивый качественный и детально проработанный UI.

  • Сокращение размера финальной сборки

Быстрее скачивание и обновление приложения.

  • Переиспользование компонентов

Выделять отдельные элементы в переиспользуемые компоненты стало проще и быстрее.

SwiftUI

До появления SwiftUI стандартом разработки под iOS являлся UIKit. UIKit — это фреймворк, который применяется для создания пользовательского интерфейса в iOS-приложениях с 2007 года. Он использует императивный подход к разработке. Используя этот фреймворк, программисты должны были описывать буквально всё. Определялись все свойства каждого UI-элемента: положение на экране, размеры, цвета, шрифты и т. д.

SwiftUI подразумевает использование декларативного подхода к разработке пользовательского интерфейса. Он дает возможность описывать элементы интерфейса, используя концепцию зависимостей данных между ними, а не процесс их создания и настройку. Это означает, что каждый элемент интерфейса зависит от данных, которые ему передаются. Если эти данные изменяются, то соответствующие элементы интерфейса автоматически обновляются, что является однонаправленным подходом в программировании. Пониманию особенностей SwiftUI помогает его связка с реактивным программированием и библиотекой Combine. В нем данные представляются в виде потоков, автоматически обновляющихся при изменении состояния представления.

Выгоды от внедрения

Ускорение разработки

SwiftUI позволяет разработчикам писать меньше кода для создания интерфейсов, что значительно ускоряет процесс разработки приложений. 

  • Снижение затрат на разработку

Упрощение кода и более интуитивное построение интерфейсов уменьшают вероятность ошибок и необходимость последующих исправлений. 

  • Повышение качества и производительности

SwiftUI обеспечивает высокую производительность и плавную работу приложений благодаря своей тесной интеграции с Apple-экосистемой.

  • Улучшение опыта командной работы

Использование интуитивного и декларативного подход SwiftUI облегчает понимание кода другими членами команды, что улучшает совместную работу и ускоряет процесс разработки.

  • Использование современных технологий

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

Бизнес-результат

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

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

Выводы

Запуск новых проектов на упомянутых технологиях прошел очень удачно. Даже не смотря на некоторые трудности, с которыми пришлось столкнуться на старте разработки. Основная сложность, которую нам пришлось преодолеть, заключалась в необходимости выделить на получение проектными командами новых знаний и практики работы по-новому. Затраченное время на получение опыта с лихвой окупилось тем количеством преимуществ, которым обладают фреймворки с декларативным подходом работы с UI. Дополнительным бонусом отметим, что благодаря одновременному переходу на «смежные» технологии в разработке под iOS и Android, получилось дополнительное сближение команд, работающих над приложениями под разные платформы.