В Theodo с апреля 2018 года мы разрабатываем библиотеки общих компонентов React для одного из наших крупнейших клиентов. Мы доказали ценность поддержки такого проекта и стабилизировали его архитектуру и конфигурацию.

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

Что такое проект общих компонентов?

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

  1. Пользовательский код
    Бизнес-код, предназначенный для решения проблемы по-новому.
    Примеры: веб-сайты Facebook или Airbnb, «Uber приложение"
  2. Библиотеки
    . Открытый или частный доступ и высоко факторизованный код, решающий общую проблему, призванную ускорить и усилить разработку нескольких приложений.
    Примеры: React .JS framework , Система материального дизайна пользовательского интерфейса , Formik form manager

Тип библиотеки: общие компоненты / система проектирования

Среди этих библиотек часто можно найти библиотеки с предопределенными и адаптируемыми компонентами пользовательского интерфейса, которые помогают командам создавать пользовательский интерфейс намного быстрее и с большей согласованностью во всех приложениях.
Примеры: D3 , Bootstrap, Material UI (снова)

Стоит ли иметь свой?

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

  • экономия времени на разработку между командами - ›чтобы не разрабатывать одни и те же компоненты.
  • помогает согласовать практики UX / UI с вашими приложениями - ›он централизует реализацию UX / UI и дизайн бренда в одном месте для всей вашей компании.
  • принудительное согласование и обновление вашего технического стека в разных приложениях - ›поскольку будущие проекты с новейшими библиотеками должны быть совместимы с вашими общими компонентами.
  • Упрощение обмена бизнес-правилами между командами - ›при совместном использовании компонентов в компании вы также можете совместно использовать бизнес-логику по сравнению с библиотеками с открытым исходным кодом

В последнее время мы видим все больше и больше компаний, начинающих подобные внутренние проекты. У каждого из них свой стек, особенности дизайна или даже бизнес-правила: они предпочитают свою систему. Один из последних в этой серии - Uber: https://eng.uber.com/introduction-base-web. Вы также можете взглянуть на Систему углеродного дизайна IBM.

Вот краткий обзор некоторых из наших общих компонентов:

Как я узнаю, что у моей команды должна быть библиотека общих компонентов?

Какие условия должны соблюдаться для поддержки такого проекта?

1. 🚀 Множество приложений

Состояние

  • У вас параллельно работает несколько проектов и часто запускаются новые
  • Общие компоненты становятся полезными, если есть возможность повторного использования как минимум 2 раза на компонент

Почему?

  • Разработка такого проекта обходится дороже: поток разработки тяжелее, когда вы вносите вклад в библиотеки, качество и документация должны быть наивысшего качества, потому что они влияют на несколько продуктов и команд одновременно.
  • В нашем собственном проекте мы внимательно следили за рентабельностью инвестиций и доказали, что совместное использование компонентов в два раза превышает затраты на их разработку.

2. 🏭 Один общий бизнес и дизайн

Состояние

  • В большинстве ваших проектов используется один и тот же набор бизнес-правил и рекомендаций по дизайну.
  • Со временем команды разработчиков воссоздают очень похожие функции

Почему?

  • Если вы разделяете компоненты без состояния для создания дизайн-системы, ее главная ценность - унифицировать дизайн для всех приложений. Поэтому, если вы не соблюдаете это условие, вы теряете ценность совместного использования: компоненты станут слишком настраиваемыми, а значит, слишком сложными для разработки.
  • Если вы хотите поделиться более крупными и связанными с бизнесом компонентами, это означает, что несколько приложений используют одни и те же бизнес-данные и правила.

3. ⚙️ Единый стек

Состояние

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

Почему?

  • Простота совместного использования компонента полностью связана с библиотекой, используемой для его кодирования: встраивание Vue в React обходится дорого и часто может приводить к ошибкам / задержкам.

Возьмем пример:

Я работаю в ИТ-команде большого банка. Стоит ли начинать подобный проект в своей компании?

  • 🚀 Множество приложений: в банке всегда есть как минимум 5 команд, работающих над разными приложениями параллельно ✅
  • 🏭 Один общий бизнес и дизайн: все эти приложения используют одни и те же принципы UX / UI, и у них действительно одинаковые бизнес-данные и логика, на которых они основаны ✅
  • ⚙️ Единый стек: команды выровняли свой стек, все они разрабатывают с использованием React, Redux и стилизованных компонентов ✅

🎉 Все зеленые, давайте начнем проект с общими компонентами!

Теперь, когда я убежден, с чего мне начать?

Чтобы помочь вам запустить или ускорить аналогичный проект, мы открыли исходный код всей нашей установки и документации. Там вы найдете наши самые ценные знания. У вас также есть возможность скопировать и вставить весь проект и повторно использовать его как есть.

Вы также можете найти дополнительные пояснения в видео и слайдах моего выступления на React Foo в марте.

Что дальше?

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

Я надеюсь, что эта статья «принесла вам зерно на вашу мельницу», что она даст вам еще больше причин для начала чего-то подобного и поможет вам добиться успеха.

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

Вы планировали сделать аналогичный проект? Или уже пробовали? А как у вас все прошло? Сообщите нам об этом в комментариях!