Разработка сущностей программы - Разработка модуля программируемых сценариев взаимодействия устройств в рамках интеграционной платформы интернета вещей

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

На Рисунке 15 изображена UML диаграмма классов, относящихся к описанию сценария в разрабатываемом модуле.

uml диаграмма классов сценария взаимодействия устройств

Рисунок 15. UML диаграмма классов сценария взаимодействия устройств

Для опиcания одного устройства была создана сущность Device, у которой есть уникальный идентификатор Id и название - Name. Уникальный идентификатор является идентификатором, используемым в платформе для упрощения взаимодействия устройств и отсутствия необходимости создания дополнительных свойств. Чтобы избежать повторения используемых идентификаторов в различных платформах, добавим к идентификатор префикс, соответствующий краткому названию интеграционной платформы. Таким образом мы сможем сразу определить в какой интеграционной платформе зарегистрировано данное устройство, а также обеспечим уникальность идентификатора в модуле, так как в рамках одной платформы идентификаторы будут точно уникальными. Имя загружается из интеграционной платформы. Если оно отсутствует, в этом поле дублируется значение идентификатора.

Следующей сущностью является Event, описывающее событие, пришедшее с устройства и на которое будет происходить подписка в начальном узле. Id генерируется самим модулем, с помощью средств NodeJS. DeviceId - устройства задается пользователем при создании сценария, это то устройство, на которое происходит подписка. EventType - тип сообщения, которое мы ожидаем от платформы. Этот тип зависит от конкретного устройства и платформы. Соответственно, можно создавать несколько сценариев, слушающие различные события с одного устройства. Time - время совершения события, необходимо для логгирования. IsProcessed - поле булевого типа, обозначающее одно из двух состояний события: было ли оно обработано или нет. Data - небольшой объект для хранения данных, пришедших вместе с событием. Взяв пример с датчиком температуры, в Data придет Текущее значение температуры с датчика.

Ключевой сущностью является Node - эта сущность обозначает узел в сценарии взаимодействия. Безусловно у Node есть Id идентификатор, уникальный для модуля. За название, данное модулю пользователем, отвечает поле Name. У Node также есть поле NodeType, обозначающее тип этого узла. Это поле может быть одним из трех типов:

    - Start - входной узел; - Intermediate - промежуточный узел; - End - выходной узел.

Также, в случае, если это промежуточный узел или выходной узел, у Node непустое поле PrevNode - ссылка на предыдущий узел.

В случае, если потребуется обработка данных или ветвление процесса выполнения, у сущности Node есть свойство Func, которое является функцией на языке JavaScript, которая выполнится, когда выполнение сценария перейдет к текущему узлу.

У Node может быть несколько следующих узлов, поэтому поле NextNodes является массивом. Если в поле Func не присутствует условия выбора следующего Node, то будет выбран первый узел из массива. Пришедшая в узел информация из предыдущего узла или из внешнего сервиса хранится в поле CurrentData - это любой JSON объект. В функции, в поле Func, можно использовать CurrentData.

Если текущий узел имеет тип Start, то у него есть ссылка на событие, по которому началось выполнение сценария. Это ссылка находится в поле IncomingEvent.

Если текущий узел имеет тип End, то у него есть ссылка на команду, которую следуют выполнить для завершения выполнения сценария. Эта ссылка находится в поле OutcomingEvent.

Обобщающей сущностью для сценария является Scenario. Как и у всех остальных сущностей, у этого объекта присутствуют поля Id и Name. Также у этого объекта есть ссылка на стартовый узел StartingNode, с которого начинается выполнение сценария. Как было заявлено при разработке требований, у сценария должен присутствовать статус. На данный момент у сценария есть поле Status, значением которого может быть одно из двух:

    - Active, означающее, что текущий сценарий активен и событие в стартовом узле должно слушаться; - Inactive, означающее, что текущий сценарий не активен и событие в стартовом узле НЕ должно слушаться.

Похожие статьи




Разработка сущностей программы - Разработка модуля программируемых сценариев взаимодействия устройств в рамках интеграционной платформы интернета вещей

Предыдущая | Следующая