О мобильной библиотеке и любви к React Native

Habrahabr

В апреле состоялась конференция для разработчиков мобильных приложений Mobius. На мероприятии Программу «Единая фронтальная система» представляли лидеры команды мобильной разработки Дмитрий Евстратов и Даниил Калинцев (Отдел развития платформы ЕФС АО СберТех) с рассказом о масштабируемом VIP архитектурном дизайне для компонентов с использованием React Native. Для тех, кому интересна мобильная разработка Программы ЕФС, кто не присутствовал или не успел пообщаться с ребятами на конференции, мы подготовили короткое интервью. В комментариях к нему вы можете задать вопрос спикерам напрямую.     — Расскажите о мобильной разработке в Программе, над чем вы работаете?

— Отметим, что мобильная разработка в Программе появилась относительно недавно, около года. Преимущественно мы занимаемся созданием приложений для внутреннего клиента, т.е. сотрудников банка. В настоящий момент наша команда поддерживает одно мобильное приложение, разработанное полностью на нативных технологиях, но в ближайшем будущем мы планируем полностью перейти от создания нативных приложений с нуля к быстрой разработке приложений на Мобильной Платформе ЕФС, использующей технологию React Native. React Native позволяет нам решить задачу с обеспечением омниканального вывода продуктов банка в mobile и desktop клиенты, т.к. прикладной код теперь использует один и тот же технологический стек – TypeScript (мы за типизированный JavaScript), React и Redux. Мобильная платформа – это комбинация из набора back-end сервисов и front-end библиотеки компонентов для построения мобильных интерфейсов и удобной связи с back-end сервисами Мобильной Платформы. На Мобильной платформе уже разрабатывается ряд мобильных пользовательских сервисов и около десятка крупнофункциональных блоков, которые возможно переиспользовать для других функциональностей.   — Интересно, расскажите подробнее про мобильную библиотеку.

— Мобильная библиотека ЕФС – это два крупных направления: визуальные компоненты (кнопки, переключатели, стилизованные таблицы, выпадающие меню и т.д.) и невизуальные сервисы (логирование, аутентификация, удалённое конфигурирование работа с сетью и т.д.) В задачи нашей команды входит весь жизненный цикл продукта: проектирование, разработка, тестирование, поддержка, а также планирование стратегического развития для поддержки динамически меняющегося бизнеса. Мы стараемся подходить к разработке библиотеки с максимальной строгостью и щепетильностью. Стараемся довести компоненты и сервисы до совершенства. В процессе разработки у нас, конечно же, появляются трудности и проблемы, указывающие на несовершенство выбранной архитектуры. Но мы не отчаиваемся и итерационно её улучшаем.

Библиотека дала нам возможность плотно познакомиться с миром JavaScript и TypeScript в частности. Мы открываем для себя новые подходы, архитектурные паттерны (такие, как Flux) и нам это нравится, потому что расширяет наш кругозор и дает нам идеи для новых уникальных решений.

Стоит отметить, что в настоящий момент мы планируем использовать мобильную библиотеку только для внутренних проектов. Две ближайшие задачи помимо разработки и расширения возможностей компонентов – это разработка мобильных рабочих мест сотрудников (МРМ), динамически обновляющих свой контент с использованием возможности интерпретации JS налету, и переход к унифицированной с desktop версией библиотеки, позволяющей разрабатывать кросс-платформенные фронтальные сценарии. Эти задачи помогает нам решить React Native.

— Сколько времени может уйти на разработку компонента библиотеки?

— На компоненты уходит от недели до месяца. Простые можно сделать за неделю, не считая времени на тестирование. Для сложных компонентов потребуется около месяца активной разработки, чтобы обеспечить стабильность работы компонента и его полное покрытие тестами. Внутри мы не перестаем дискутировать о стабильности технологии: сейчас React Native сам по себе 0.46, и финальная версия 1.0 еще будет не скоро, отметим, что и выпуск новых версий существенно замедлился.

С другой стороны, в каждой новой версии становится меньше исправлений. Сейчас версия стала выходить раз в месяц и по release notes можно сделать вывод, что количество исправлений не увеличилось в сравнении с 2-х недельными итерациями выпуска. Мы склоняемся к тому, что Facebook не откажется от технологии React Native, — уж слишком много сил ушло на него и многие продукты Facebook крутятся именно на нем.

Хотя риски есть, но мы не сильно переживаем, так как используем самую малую часть React Native, для нас это низкоуровневый движок, который является мостом между JS и Objective-C, а также строителем интерфейса приложения по DOM дереву, сгенерированному React JS. 80% функциональности наших компонентов никак не контактирует с особенностями React Native, поэтому если вдруг от него откажется Facebook, мы сможем сами написать подобную штуку. Опыт и понимание технологии у людей уже есть.

— В мобильной разработке вы цените «доступность низкоуровневых возможностей ПО», а как это сочетается с работой с React Native? Со стороны кажется, что она неизбежно должна быть менее низкоуровневой, чем традиционная мобильная разработка.

— Наверное, это сочетание в том, как мы это используем. Все низкоуровневые вещи мы пишем на Objective-C, на языке разработки мобильных приложений. Мы используем все нативные возможности платформы iOS, нам ничто не мешает использовать все что угодно, например, любые дополнительные фреймворки, которые используются только в IOS сообществе. React Native нисколько нас не ограничивает и позволяет использовать наш опыт мобильной разработки в полную силу. Мы экспериментируем и пробуем новые технологии в процессе создания библиотеки. Что интересного можно отметить в технологическом стеке в общем: использование фреймворков Kiwi, Realm и Typhoon, Generamba для создания шаблонов наших модулей. React Native с Typhoon — это уникальная в своем роде штука. В целом, многое, что мы делаем в Программе ЕФС, уникально, аналогов на рынке нет по причине специфики задач и масштабов.

Нас часто спрашивают, когда стоит использовать React Native и зачем это нужно. Конкретно в нашем случае, React Native нужен для того, чтобы унифицировать стек разработки прикладных разработчиков, создать возможность для кросс-платформенных решений, а также динамических мобильных рабочих мест. React Native позволяет людям, не имеющим опыта в Objective-C, Swift, Java, Kotlin, создавать мобильные приложения на том же технологическом стеке, что и web-приложения.

— У части разработчиков существует предубеждение не против JavaScript в целом, а против его выхода за пределы фронтенда (вроде Node.js) — особенно. React Native тоже является таким выходом за пределы фронтенда?

— Можно сказать, что и так. React Native позволяет работать и с базами данных, и с внутренними механизмами самого устройства, например, геолокацией. Он позволяет использовать возможности мобильного устройства по максимуму.

— Большинство новых разработчиков сейчас учат сразу Swift. Что вы думаете о Swift? И что лучше изучать Objective-C или Swift?

— Идеально знать оба языка невозможно, но для новых разработчиков, нужно знать хотя бы в малой мере Objective-C и хорошо Swift: Objective-C все равно в какой-то мере нужен разработчикам, некоторые фишки лучше понять именно на нем. А так Swift – очень приятный язык, который сейчас стабилизируется. У него были сложности, когда они выпускали новые версии. У всех была головная боль, связанная с переходом на новую версию, т.к. очень часто менялся именно синтаксис. Но сейчас он стал только лучше. Есть уже много библиотек и статей по Swift. Objective-C за последний год стал сильно уходить на задний план.

— Какие результаты достигнуты?

— Завершен первый виток развития с React Native, пока нет массового запуска мобильных приложений, использующих нашу библиотеку. Сейчас у нас идет уже следующий виток, когда мы знаем многие фишки, которые предоставляет JavaScript и React Native. Теперь мы опираемся на наш опыт и идем дальше: есть динамическая подгрузка частей приложения, команда прикладных разработчиков будет делать не отдельные приложения, а сами бизнес-процессы. Полноценного фидбэка на нашу библиотеку пока еще нет, только от одной команды разработчиков, им все нравится, они достаточно быстро делают свои приложения, используя библиотеку. Когда делаешь мобильное приложение на нативном коде, самое больное – когда надо сделать сложный UI, это всегда отнимает много времени. Они этим не занимаются и просто конструируют процесс. У них получается такое прототипирование, но более продвинутое. В целом, они довольны, а если они довольны, то и мы рады, а когда действительно пойдет прирост в скорости и будет реально ощутимая польза, будет настоящий прорыв.

В команде мобильной разработки Программы ЕФС сейчас 11 человек — 9 разработчиков, product owner и scrum master. В команде всего две девушки, одна из которых разработчик. Они очень толковые!

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