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

Помічник

інформація

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

порада

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

Архітектура

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

helper-arch.svg

Склад

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

type AsyncFn = (...args: any[]) => Promise<any>;
type Fn = (...args: any[]) => Promise<any>;
type AnyFunction = Fn | AsyncFn
type Structure<T extends Record<string, AnyFunction>> = {
[K in keyof T]: T[K]
}

де:

  • AsyncFn - тип будь-якої асинхронної функції.
  • Fn - тип будь-якої синхронної функції.
  • AnyFunction - тип будь-якої асинхронної або синхронної функції.
  • Structure - структура помічника
    • Record<string, AnyFunction> - перелік функцій в форматі "ключ-значення", де кожен ключ відображає назву функції, а йому відповідає сама функція.

Реалізація

import {setHelper} from '@x-fiber/display';

type UserName = { name: string; surname: string };
type Helper = {
getFullName: (
name: UserName['name'],
surname: UserName['surname'],
beforeNames: UserName[]
) => string;
};

export const helper = setHelper<Helper>({
getFullName: (
name: UserName['name'],
surname: UserName['surname'],
beforeNames: UserName[]
): string => {
// ... handler logic
},
});

де:

  • setHelper - функція сеттер, з ядра відображення, яка повертає структуру документа "Помічник".
  • UserName - тип структури обʼєкта імені особи.
  • Helper - тип структури документа "Помічник".
    • getFullName - допоміжна функція, яка створює строчний вид повного імені особи на основі його імені, фамілії, попередніх імен та прізвищ.
  • helper - реалізація структури документа "Помічник" з переліченими допоміжними функціями.

Реєстрація

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

import {setPointer} from '@x-fiber/display';
import {BusUsersAggHelper} from './BusUsers.agg.helper';

type BusDomains = 'BusUsersAgg' | 'BusUsersAuthSpec'

export const BusUsersAggPointer = setPointer<BusDomains>('BusUsersAgg', {
helper: BusUsersAggHelper,
// ... other documents
});