Перейти до основного вмісту

Продюсер

інформація

Продюсер призначеня для створення обробників ws подій, які виконуються при взаємодії з користувачами з представленнями, які розташовані на графічних інтерфейсах. Продюсери можуть виконувати, як просту логіку з одним - двома типами операцій, так і здійснювати багатоцільовий сценарій роботи.

порада

X-Fiber використовує підхід "Композиція" при створені продюсерів. Так, валідація даних можлива лише в документі "Валідатор" тощо. Цей підхід полягає в групуванні бізнес-логіки обробника на стадії і віднесенні цих стадій до відповідних документів.

Архітектура

Першочергово документ "Продюсер" повинен бути зареєстрований в точці входу предметної області, яка повинна бути зареєстрована в відповідному сервісі. Виклик функцій продюсера можуть бути описані в представленнях, а самі представлення використані в відповідних сторінках графічного інтерфейсу.

При запуску програми веб-клієнта відбудеться завантаження бізнес-схеми в ядро відображень формуючи знімок бізнес-схеми. Після чого відбувається візуалізація сторінки запиту. Якщо на сторінці запиту наявні представлення з використанням функцій продюсера та відбудеться подія виконання функції продюсера - функція продюсера виконається.

producer-arch.svg

Склад

Продюсер відображає структуру даних у форматі "ключ-значення", де кожен ключ відображає назву функції, а йому відповідає власне сама функція. Цей підхід дозволяє зручно організувати та керувати функціональними можливостями системи, забезпечуючи швидкий доступ до потрібного функціоналу через імʼя функції як ключ.

Реалізація

Реєстрація

Для використання продюсерів необхідно зареєструвати документ "Продюсер" в точці входу в предметну область pointer. Наприклад, для модуля BusUsersAgg, необхідно використовувати функцію setPointer для створення опису точки входу, та зареєструвати в цій структурі документ "Продюсер".

import {setPointer} from "@x-fiber/display";
import {BusUsersAggProducer} from "./BusUsers.producer";

type BusDomains = 'BusUsersAgg' | 'BusUsersAuthSpec'

export const BusUsersAggPointer = setPointer<BusDomains>("BusUsersAgg", {
producer: BusUsersAggProducer,
// ... other documents
});