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

Моя компания Cloudstitch синхронизирует веб-сайты с электронными таблицами. Вы можете создавать впечатляюще сложные сайты без внутренней инфраструктуры: просто простая электронная таблица.

…Но иногда эта таблица не так проста.

Вчера я помогал клиенту отладить доску объявлений, которая работает на Cloudstitch. Веб-сайт выглядит как обычный форум сообщений, но он синхронизируется с электронной таблицей, содержащей два рабочих листа: Сообщения и Комментарии.

На листе Сообщения есть столбец, в котором комментарии для каждого сообщения суммируются по следующей формуле:

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

Но какое бы умное решение я ни пробовал, все они в конечном итоге заставляли меня морщиться.

Соединения в стиле Rails

Затем я вспомнил, как смотрел оригинальное руководство по Ruby on Rails, думая о том, какими волшебными были соединения данных. Ключевой вывод DHH заключался в том, что большинство объединений данных в веб-приложениях соответствуют нескольким простым шаблонам, так почему бы не добавить синтаксический сахар для их автоматизации? Таким образом, простая аннотация, подобная приведенной ниже, расширится на уровне ORM до эквивалентного соединения один ко многим:

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

Соединения в стиле Rails для электронных таблиц

К концу дня у Cloudstitch была производственная поддержка двух типов соединений: belongs_to в стиле Rails и has_one. Вот как это работает:

  • Запросите присоединение, добавив специальный «столбец присоединения» в вашу электронную таблицу.
  • Cloudstitch материализует соединение и кэширует результаты [1]
  • Веб-шаблоны, которые синхронизируются с этой электронной таблицей, теперь могут ссылаться на соединенные, вложенные объекты JSON — именно то, что нужно автору шаблона — вместо плоских таблиц JSON.

Легче показать, чем рассказать — вот пример каждого типа.

Принадлежит

Добавление столбца Принадлежит создает соединение "1 ко многим". Он помещает результаты во внешнюю таблицу, указанную в имени столбца.

Допустим, у вас есть таблица Football со столбцами Команды и столбцами Игроки. Чтобы присоединиться к составу каждой команды на листе Teams, выполните следующие действия:

Cloudstitch материализует эту таблицу в следующий JSON:

Теперь ваш шаблон может быть написан для этой вложенной иерархии. Нет необходимости в сумасшедших формулах электронных таблиц или ригамаре Javascript. Вот простой пример Handlebars.

Имеет один

Добавление столбца Имеет один создает соединение 1-к-1. Элементы из внешней таблицы (указаны в имени столбца) будут встроены в локальный объект. Содержимое столбца Has One указывает значение для объединения.

Давайте перевернем этот пример с футболом. Скажем, мы хотим встроить данные команды в каждый элемент игрока. Используйте столбец Есть один, как показано ниже:

Cloudstitch материализует эту электронную таблицу в объект JSON, отличный от предыдущего:

Точно так же теперь вы можете написать шаблон Handlebars, который использует преимущества этого встраивания, как этот.

Простые концепции должны иметь простые реализации

Ну это все. 24 часа спустя эту громоздкую табличную формулу, с которой все началось, можно выразить с помощью простого столбца под названием Принадлежит сообщениям!ID.

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

Мы нанимаем

Не могу закончить без затычки: Cloudstitch нанимает. Если вы веб-разработчик или дизайнер, который хочет упростить и демократизировать веб-разработку, мы хотим поговорить с вами.

[1] Примечание. Мы используем Алгоритм Тарьяна как дешевый O(|V|+|E|) способ обнаружения циклов, и если мы находим его, мы вообще пропускаем обработку соединения.