Metadata.js - это комплект из нескольких js-библиотек для построения учетных систем, веб-приложений и умных сайтов. В ней нет революционных открытий, но есть отличительные особенности:
Мы предлагаем делить систему не на клиент и сервер, а на код, обслуживающий данные и код, обслуживающий интерфейс. В зависимости от задач, бизнес-логика может жить и в браузере и на стороне Node и внутри базы данных. Многие задачи удаётся решить вообще без серверного кода, хватает абстрактного http-api couchdb. Деление системы на backend и front, кажется искусственным. Автономное приложение, работающее в браузере или webview мобильного устройства, хранит данные в idb - ему не нужен центральный сервер. С другой стороны, калькуляторам планирования или оптимизаторам раскроя, не нужен интерфейс - они могут жить целиком на сервере. С третьей стороны, интерфейсом к нашим данным может быть не только браузер, а например, экранные формы и объекты 1С и других учетных систем. Metadata годится для построения как модных noBackend приложений, так и классических клиент-серверных приложений и невизуальных микросервисов.
В большинстве веб-фрейморков, данные в браузере - это простой js объект. Иногда, известна структура этого объекта (некое подобие метаданных). Иногда, есть служебные методы, скрывающие тонкости серверных вызовов, но это не меняет сути: данные на клиенте простые и глупые, у них нет характера, нет предопределенного поведения, они не умеют сами рисовать про себя экранные формы, не содержат предопределенных методов и подписок на события. В metadata.js - умные данные со ссылочной типизацией. Реквизиты наших документов и справочников могут быть не только примитивных типов строка или число, но и ссылаться на любые классы данных. Например, документ Заказ
, может иметь реквизит Контрагент
типа Справочник.Контрагенты
. Наши данные имеют предопределенное поведение, унаследованное от базового класса, излучают события, на которые можно оформить подписки. Документы и справочники имеют экранные автоформы и в некоторых случаях, сайт на метадате может не содержать ни одной строчки пользовательского кода - достаточно описать метаданные и собрать приложение из типового шаблона
Много сделано для обеспечения высокой доступности данных, вплоть до автономного режима работы. Понятно, что функциональность приложения в offline, будет ограничена. Сводный отчет к большим данным без доступа к серверу не построить, но в автономном режиме можно создавать и редактировать документы. Изменения будут отправлены на сервер и прочитаны встречные при восстановлении доступа к Сети. Недоступность сервера теперь не парализует работу критичных клиентских рабочих мест. Кладовщики могут сканировать товары на своих складах, рабочие - получать чертежи и спецификации на экраны безбумажки, кассиры продолжат принимать деньги, а станки продолжат крутиться и обрабатывать команды даже при поломках сервера
Основное серверное хранилище: couchdb с текущими задачами справляется на ура, но в системе предусмотрены точки роста: переопределяемые адаптеры. При необходимости, данные можно хранить в SQL или Графовой базе банных. Возможны гетерогенные запросы к разным серверам, в том числе, одновременно к SQL и NoSQL с последующей склейкой результата. В тандеме couchdb + pouchdb, подкупила master-master репликация из коробки и акцент на отказоустойчивости и доступности данных
Основной способ рендеринга клиентского интерфейса: react. Плотно задействованы библиотеки material-ui, react-virtualized и react-data-grid. Элементы управления интерфейса полностью отделены от движка данных. При необходимости, UI может быть нарисован альтернативными инструментами. Предпочтение отдано реакту, благодаря его парадигме многоразовых компонентов
Первым языком программирования для меня был Pascal с ассемблерными вставками. Позже, Delphi, C, VB внутри Access, еще позже - 1С, на котором было сделано много интересных проектов. 1С подкупает удобным IDE с мощным отладчиком и конечно, высокоуровневостью встроенных объектов. Документ, Регистр, Компоновка - это очень круто. Можно построить полноценную учетную программу со складом и кассой не написав ни строчки кода, покликав мышкой в конфигураторе. По скорости разработки настольных учетных систем, конкуренты 1С мне не известны. К сожалению, за простоту конфигурирования приходится дорого платить. Тормознутость системы до определенного момента преодолевается экстенсивно: просто покупаем сервер помощнее, но если нужен доступ к данным миллиону пользователей, сервер 1С с такой задачей справляется плохо. Дела становятся еще хуже, когда задача не вписывается в предопределенные платформой шаблоны. Язык программирования 1С и своеобразная архитектура, задают программисту жесткие границы, сложность преодоления которых, может перевесить плюсы от типовых объектов платформы.
В задаче, с которой началась история метадаты, требовалась работа с редактором векторной графики, расчет спецификаций и ценообразования в offline-режиме на клиенте. Инструментов для работы с распределенными данными 1С не предоставляет. Планы обмена уродливы от рождения, задачу бесконфликтной репликации не решают, а на больших данных (от 1000 узлов обмена) просто не работают. С графикой, тоже всё плохо. Три человекогода, потраченные на рисовалку во встроенном в 1С браузере, завершились провалом. Зато, открыли мне мир javascript, прототипное наследование которого даёт программисту столько свободы, что многие не выдерживают и просят эту свободу ограничить (Flux, TypeScript). Наверное, эта свобода, и есть главная причина, по которой я уже не мог оставаться программистом 1С. Открытый исходный код, простота подключения сторонних библиотек в javascript и возможность модифицировать их поведение, выглядят привлекательнее черного ящика с проприетарной лицензией 1С.
Компонетны метадаты упрощают разработку веб-приложений. Программист получает инструменты для работы с распределенными, ссылочно-типизированными данными в браузере и Nodejs, может сосредоточиться на бизнес-логике. Вопросы стандартного интерфейса, автономного режима и синхронизации данных, платформа берёт на себя.
На метадате работает Заказ дилера и связанные с ним сервисы Параметрических заказов и Планирования производства.
На метадате работает этот сайт. Сейчас здесь только статьи, но в ближайшие месяцы, добавим инструменты управления потоками задач и другие полезные подсистемы.
Метадата помогает программисту не опускаться на низкий уровень при решении задач сбора, доставки и обработки данных:
Метадата задумана для построения сложных распределенных систем, но с её помощью, можно решать и простые задачи. Например, если на предприятии внедрена 1С:УПП или 1C:ERP, с помощью метадаты легко сделать личные кабинеты покупателей и поставщиков, разместить на сайте живой каталог товаров с красивым дизайном, динамическими остатками и ценами. Рабочие места водителей, курьеров и торговых представителей, инструменты сбора данных со сканеров и датчиков, онлайн-отчеты, инструменты согласования документов и т.д. Сложные данные, для работы с которыми программисту ранее требовалась платформа 1С, теперь легко доставить в браузер и микросервис.