Пол Хилл, старший директор по разработке программного обеспечения Bazaarvoice

Sampling — это продукт Bazaarvoice, который позволяет потребителям присоединяться к сообществам и получать ограниченное количество бесплатных продуктов. В свою очередь, потребители предоставляют честные и достоверные обзоры продуктов, которые они пробуют. Продукты выпускаются потребителям для отзывов в то же время. Это вызывает спешку требовать эти продукты. Это пример совместной проблемы домена, когда многие пользователи пытаются воздействовать на одни и те же данные (как описано в книге Дизайн, управляемый доменом Эрика Эвана).

Bazaarvoice дважды в год проводит двухдневный хакатон. Сотрудники могут использовать это время для изучения любых интересующих их технологий или идей. Благодаря нашим хакатонам Bazaarvoice разработала важные новые функции и продукты, такие как наша рекламная платформа и наши возможности персонализации. На хакатоне Bazaarvoice 2017.2 команда из Белфаста продемонстрировала решение этой совместной проблемы домена с использованием синхронизации состояния почти в реальном времени.

Bazaarvoice использует React + Redux для нашей веб-разработки. Эти библиотеки используют концепции однонаправленных потоков данных и управления неизменным состоянием. Это означает, что всегда есть один источник правды, хранилище, и нет путаницы в том, как изменить состояние приложения. Обычно мы используем библиотеку побочных эффектов redux-thunk для синхронизации состояния между сервером и клиентом через вызовы HTTP API. Проблема здесь в том, что синхронизация в одну сторону, она не реактивная. Клиент может указать серверу изменить состояние, но не наоборот. В области совместной работы, где данные постоянно меняются, синхронизация почти в реальном времени имеет решающее значение для обеспечения хорошего UX.

Чтобы решить эту проблему, мы решили использовать платформу Google Firebase. Это решение предоставило множество функций, которые безупречно работают вместе, например аутентификация OAuth, хостинг CDN и БД в реальном времени. Одна важная вещь, которую следует отметить в отношении Firebase, это серверная часть как услуга, в этом проекте не было кода серверной части.

База данных в реальном времени предоставляет модель публикации/подписки на узлах базы данных, что позволяет клиентам всегда быть в курсе последнего состояния. В базе данных Firebase Realtime DB нельзя упускать из виду важную концепцию: доступ к данным возможен только по ее ключу (точечный запрос).

Вы можете думать о базе данных как о дереве JSON, размещенном в облаке. В отличие от базы данных SQL здесь нет таблиц или записей. Когда вы добавляете данные в дерево JSON, оно становится узлом в существующей структуре JSON со связанным ключом (Ссылка)

Цели хакатона
1. Пользовательский интерфейс, настраиваемый в режиме реального времени
2. Администрирование кампании в реальном времени и участие в ней
3. Демонстрация в реальном времени для всей компании по обоим вышеперечисленным вопросам.

Настраиваемый пользовательский интерфейс в режиме реального времени
Во время демонстрации хакатона мы продемонстрировали обновление стиля и содержимого приложения через портал администрирования, что позволит клиентам настроить приложение в соответствии со своим брендом. Эти обновления были отправлены в режиме реального времени на более чем 50 клиентских устройств от Белфаста до Остина (4608 миль).

Код для достижения этой синхронизации состояния между клиентами был обманчиво прост!

Учитывая характер реакции, после получения обновления конфигурации стиля каждое устройство просто «отреагировало».

Администрирование кампании и участие в ней в режиме реального времени
В демоверсии мы добавили 40 продуктов в реальную кампанию. Это переместило 40 продуктов на экран администратора и в мобильное приложение 50+. Затем участникам было предложено забрать предметы.

Представление администратора

Просмотр участников

Все участники прошли аутентификацию через провайдеров OAuth (Facebook, Github или Gmail).

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

Заключение
Работать с Firebase было приятно, все работало, как и ожидалось, и блестяще показало себя в демоверсии… даже на их бесплатном уровне. Шаблоны, используемые в Firebase, немного нетрадиционны для более ортодоксальных инженеров, но если ваша цель — быстрая разработка, Firebase не имеет себе равных ни на одной другой платформе. База данных Firebase Realtime создала отличный UX для проведения кампаний по выборке. Хотя Firebase не будет использоваться в рабочем продукте, он предоставил отличный контекст для обсуждения преимуществ и возможностей синхронизации данных в реальном времени.

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

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

Эта запись была опубликована 6 февраля 2018 г. пользователем Ady Young в разделе Культура, Портал разработчиков, Архитектура программного обеспечения, UX.

Читайте исходный пост здесь!