Помічники
Документ "Помічник" відповідає за опис функцій загального призначення. Ці методи можуть бути використані в обробниках
http
запитів, обробниках ws
подій, документі "Брокер" та документі "Планувальник".
Архітектура
При потребі створення допоміжних функцій необхідно створити документ "Помічник" з переліком необхідних фукнцій.
Документ "Помічник" повинен бути зареєстрований в документі "Реєстр" предметної області, який в свою чергу, має бути зареєстрований в відповідному сервісі включеному до бізнес-схеми. Це гарантує, що при запуску ядра обчислень будуть завантажені всі допоміжні функції. Здійснюючи виконання обробників запиту, подій тощо, в випадку наявності звернення до допоміжних функцій, ці функції будуть викликані.
Склад
Помічник відображає структуру даних у форматі "ключ-значення", де кожен ключ відображає назву функції, а йому відповідає власне сама функція. Цей підхід дозволяє зручно організувати та керувати функціональними можливостями системи, забезпечуючи швидкий доступ до потрібного функціоналу через імʼя функції як ключ.
type AsyncFn = (...args: any[]) => Promise<any>;
type Fn = (...args: any[]) => Promise<any>;
type AnyFunction = Fn | AsyncFn
type AnyFunctions = Record<string, AnyFunction>
type Agents = {
// agents description
}
type HelperStructure<S extends Record<string, any>, T extends AnyFunctions = AnyFunctions> = {
[K in keyof T]: T[K] extends (data: infer D, ...args: infer A) => infer R
? (agents: Agents, data: D) => R
: T[K];
};
де:
AsyncFn
- тип будь-якої асинхронної функції.Fn
- тип будь-якої синхронної функції.AnyFunction
- тип будь-якої асинхронної або синхронної функції.Agents
- агенти функціональності.HelperStructure
- структура помічника.
Аргумент агентів функціональності
Аргумент агентів функціональності являє собою обʼєкт з переліком агентів:
type IFunctionalityAgent = {
// agent functionality description
}
type ISchemaAgent = {
// agent functionality description
}
type IIntegrationAgent = {
// agent functionality description
}
export type Agents = {
fnAgent: IFunctionalityAgent;
schemaAgent: ISchemaAgent;
inAgent: IIntegrationAgent;
};
де:
fnAgent
- агент з переліком просторів імен функціональності, які надають функціональні компоненти ядра обчислень.schemaAgent
- агент з переліком функціональності для доступу до інших складових бізнес-схеми.inAgent
- агент з переліком просторів імен функціональності, які надають інтеграційні рішення ядра обчислень.
Деталі структури кожного агента функціональності описується в розділі "Агенти"
📄️ Агент функціональності
📕 Опис можливостей агента функціональності
📄️ Агент бізнес-схеми
📕 Опис роботи агента бізнес-схеми
📄️ Агент інтеграцій
📕 Опис можливостей агента інтеграцій
Аргумент даних
Аргументами даних виступає опис тих даних, які необхідно надати функції з відповідного обробника.
Реалізація
import { setHelper } from '@x-fiber/proton';
import type { Provider } from '@x-fiber/proton';
type UserName = { name: string; surname: string };
type Helper = {
getFullName: (
name: UserName['name'],
surname: UserName['surname'],
beforeNames: UserName[]
) => string;
};
export const BusUsersAggHelper = setHelper<Helper>({
getFullName: (
provider: Provider,
name: UserName['name'],
surname: UserName['surname'],
beforeNames: UserName[]
): string => {
// ... handler logic
},
});
Реєстрація
Щоб успішно використовувати допоміжні функції, документ "Помічник" повинен бути
зареєстрований в документі "Реєстр" цієї предметної області. Наприклад для предметної області - агрегат "Користувачі",
необхідно в опис документів функції setRegistry
для встановлення посилання на помічник та інші компоненти модуля:
import { setRegistry } from '@x-fiber/proton';
import { BusUsersAggHelper } from './BusUsers.agg.helper';
export const BusUsersAggRegistry = setRegistry<'BusUsersAgg'>('BusUsersAgg', {
helper: BusUsersAggHelper,
// ... other documents
});