Введение в независимую от фреймворков интерфейсную разработку

Компиляция - это общий термин в программировании, обозначающий преобразование одной единицы кода, написанной на одном языке, в другой язык. Однако транспиляция относится к конкретному действию перемещения одной единицы кода, написанной на одном языке, на другой язык с аналогичным уровнем абстракции.

В следующей статье мы опишем варианты использования для переноса кода между фреймворками во внешнем интерфейсе. Мы также рассмотрим, как мы можем использовать простой транспилятор фреймворка, с примерами.

Развитие гибкости

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

Технология блокировки

Представьте себе следующий сценарий: сейчас 2010 год, и вы находитесь в комнате принятия решений в своем офисе. Споры длились год, и заинтересованные стороны в области технологий наконец-то определились с новой структурой для восстановления устаревшего интерфейса. Они выбрали Backbone - вы в восторге, потому что это передовая технология. У вас такой большой потенциал по сравнению с вашим унаследованным стеком. Отслаивание займет большую часть пропускной способности вашей инженерной команды в течение следующих шести месяцев. Это потребует значительного обучения и новых сотрудников, которые уже знакомы с новой технологией.

Теперь перенесемся на 5 лет вперед (или два срока жизни в экосистеме JavaScript). Сейчас споры ведутся между React, Vue или множеством альтернатив, на которые вы делаете ставку, принимая ваше решение.

Этот сценарий иллюстрирует общую проблему в корпоративном мире, известную как технологическая блокировка. Изменение технологии может означать перестройку огромных стеков и обучение сотен разработчиков. Финансовые обязательства, вложение времени и ресурсов - вот почему многие опасаются технологических нововведений и осуществляют их только тогда, когда это необходимо.

Организационная гибкость

Во втором сценарии я приведу пример из SSENSE:

Мы были ранними последователями Vue, например 1.0. Недавно мы исполнили первую годовщину полного перехода на фреймворк. В настоящее время Vue находится на версии 2.8 и только недавно стал популярным в Северной Америке.

Поскольку фреймворк настолько новый, разработчиков Vue сложно найти. В результате мы обычно нанимаем разработчиков с другим опытом работы с интерфейсом и вместо этого обучаем их.

Кроме того, у нас есть целый аспект нашей организации, который создает собственные приложения для внутреннего использования. Поскольку на момент написания внутреннего программного обеспечения у Vue не было мобильной версии, мы решили использовать React Native. Это означает, что, хотя и веб-команды, и группы мобильных технологий используют одни и те же ресурсы дизайна и художественное направление, и что каждая платформа имеет много общего в дизайне, нам остается поддерживать две кодовые базы, которые почти идентичны при рендеринге.

Преобразование проблем в решения

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

Цель нашего решения - создать общую библиотеку компонентов, не зависящую от фреймворка. Мы будем писать компоненты на одном языке, которые после экспорта могут использоваться любым приложением. Работа над этой библиотекой все еще продолжается, однако я могу поделиться маленьким кусочком головоломки и, что самое важное, с точки зрения транспиляции: Flip!

Flip был создан для решения проблемы в сценарии №2 выше. По своей сути Flip - это оболочка для нескольких пользовательских Babel AST, созданных командой Vue. Вместе со многими модификациями они переносят компоненты React в компоненты Vue.

Пример файловой структуры, в которой можно использовать Flip, будет выглядеть примерно так:

- src
    - app
    - pages
    - components
 - configs
 - node_modules
    - @company/components
    - @ssense/flip

Мы можем запустить flip /node_modules/components и импортировать их в приложение из dist каталога, который сгенерирует Flip. Это может работать в основном приложении или внутри модуля узла, который использует Flip для экспорта компонентов React и Vue.

Не стесняйтесь клонировать Flip и запускать тесты, чтобы увидеть этот транспилятор в действии. Я также отправил небольшой пример вышеупомянутого взаимодействия на GitHub.

Следующие шаги

Выше я упоминал, как транспилирование компонентов связано с более крупным шаблоном - этот шаблон называется микро-интерфейсами.

Микро-фронтенды

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

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

Если вас интересует этот паттерн, вы можете найти несколько интересных инструментов здесь и здесь, список ресурсов здесь и ознакомиться с некоторыми интересными материалами здесь и здесь. Шаблон новый, поэтому вы также можете следить за отчетом ThoughtWorks о нем здесь.

P.S. - мы выпустили Flip как инструмент с открытым исходным кодом на GitHub - попробуйте его в следующем проекте! Вы можете найти его на www.github.com/ssense/flip.

Редакционные обзоры Deanna Chow, Liela Touré и Prateek Sanyal

Хотите с нами работать? Щелкните здесь, чтобы увидеть все открытые вакансии на SSENSE!