Philosophy
Создавая Blank, мы старались упростить процесс разработки и внедрения информационных систем, сохраняя при этом гибкость. Наша платформа легко подстраивается под любые требования, предлагая нестандартные и современные пути для решения традиционных задач.
Хранилища
Вся функциональность разрабатываемого на платформе Blank приложения строится вокруг одного понятия — «хранилище» или «store». У хранилищ много общего с таблицами в реляционных СУБД и коллекциями в noSQL. Также, как таблицы или коллекции, хранилища в Blank описывают структуру данных и предлагают методы для работы с этими данными. Кроме того, хранилище позволяет описать жизненный цикл данных, определить всевозможные действия, создать собственное HTTP API. И, самое главное — платформа создаст готовый пользовательский интерфейс для работы с данными сразу после описания их структуры.
Интерфейс
Настройки хранилищ позволяют управлять их внешним видом в пользовательском интерфейсе. Можно показать данные в виде таблицы, списка, отдельными карточками или разработать свой шаблон, используя HTML/CSS. Для каждого типа отображения можно включить зону просмотра выбранного элемента и указать ее расположение. Просмотр выбранного объекта также полностью настраивается — задаётся внешний вид полей на форме, их группировка и расположение.
Внешний вид приложения — дело вкуса и целей использования. Вариантов может быть множество. Для решения этой проблемы в Blank можно создавать рабочие пространства (workspaces) с индивидуальными настройками для отдельных пользователей и групп. Рабочие пространства переопределяют настройки отображения, заданные в хранилищах. Есть механизм наследования — можно создавать рабочие пространства на основе ранее созданных. Наследование может пригодиться, например, если у вас есть рабочее пространство «Для кладовщика», и требуется частично изменить его для отдельного сотрудника склада.
Управление процессом
События и задачи
При работе с данными происходит множество событий, и в хранилищах Blank есть возможность определить логику действий при возникновении любого из них. Обработчики событий описываются на языке JavaScript с доступом к базе данных, файловой системе, подсистемам работы с HTTP, e-mail и телефонии. Для выполнения сценариев в платформе используется встроенный интерпретатор.
Мы разделяем события на две категории — storeLifeCycle и objectLifeCycle. События первой категории происходят редко и используются, как правило, для записи инициализирующих данных в хранилище. Вторая категоря — жизненный цикл объекта — используется чаще и предоставляет набор событий на все базовые операции с данными: чтение, добавление, изменение и удаление. Для каждой операции есть два события — непосредственно «до» и «после» её выполнения.
Кроме обработки стандартных событий можно создать задачи — сценарии, выполняемые по расписанию. Они также описываются на JavaScript, отдельные для каждого хранилища. Для задания расписания используется синтаксис, аналогичный cron, давно знакомый администраторам *nix систем.
Пользовательские действия
Создавать, редактировать и удалять документы — это здорово, но явно не достаточно. Иногда их нужно подписывать, печатать, отправлять и делать ещё тысячи разных операций. Для этого в каждом хранилище можно описать набор действий, которые будут доступны пользователю.
Пользовательские действия — такие же сценарии на JavaScript, как обработчики событий и задачи. Для пользовательских действий настраиваются права доступа и условия, при которых возможно выполнение действия. Например, можно настроить действие «Подписать документ», доступное только роли «Управляющие» и только в том случае, когда в поле «состояние» документа установлено значение «ожидает подписи».
Можно создавать сложные действия, которые будут, например, работать с данными из других хранилищ и отправлять результат выполнения по электронной почте.
Интеграция
Используя события, задачи и пользовательские действия уже можно настроить интеграцию с другими системами в одну сторону. Из сценариев можно отправить письмо, выполнить HTTP запрос и даже совершить телефонный звонок. Для настройки двусторонней интеграции в хранилищах Blank есть возможность настроить HTTP API. Обработка запросов по этому API не отличается от всего остального — любой сценарий на том же JavaScript.
Заключение
Каждое хранилище в Blank — это отдельная экосистема, со своей логикой работы, независимой от других. Платформа, насколько это возможно, позволяет настроить ее под требования конкретного приложения, при этом берет на себя рутинные операции и обеспечивает безопасность данных.
А еще...
Blank можно применять для создания микросервисов, запустив множество экземпляров платформы, каждый из которых будет работать только с одним хранилищем и выполнять одну задачу. Обработчики жизненного цикла вместе с HTTP API позволят подружить микросервисы между собой. Правда, в этом случае потребуется реализовать свой пользовательский интерфейс.