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

Реєстр

інформація

Документ "Реєстр" призначений для реєстрації похідних документів предметної області. Завдяки документу "Реєстр" здійснюється сильна звʼязаність кодової бази конкретної предметної області. Набір похідних документів, які описують предметну область може відрізнятись від однієї предметної області до іншої, оскільки кожна сутність має власні потреби реалізації.

registry_arch.svg

Склад

Опис документа має наступний вид:

type DomainDocuments = {
// ... domain documents list
};


type DomainDocoumentation<
LANGUAGE extends string,
RELEASE extends string | string[] = string | string[]
> = {
// ... domain documentation description
};

type RegistryStructure<D extends string = string> = {
domain: D;
documents: DomainDocuments;
documentation?:
| DomainDocoumentation
| DomainDocoumentation[]
| null;
};

export const setRegistry = <D extends string = string>(
domain: D,
documents: DomainDocuments,
documentation?:
| DomainDocoumentation
| DomainDocoumentation[]
| null
): RegistryStructure<D> => {
return {domain, documents, documentation};
};

де:

  • Типи:
    • DomainDocuments - перелік документів, які може охоплювати предметна область.
    • DomainDocoumentation - тип структури опису документації предметної області.
    • RegistryStructure - тип структури документа "Реєстр".
    • setRegistry - вбудована функція в ядро обчислень, яка призначена для опису прикладної області.
      • D - строковий тип назви прикладної області, який повинен бути унікальним в рамках сервісу.
  • Аргументи:
    1. domain - ідентифікаційний тег, який однозначно визначає предметну область.
    2. documents - обʼєкт документів, які охоплює конкретна предметна область.
    3. documentation - детальний опис функціональності, інтерфейсів, параметрів виклику та іншої важливої інформації про предметну область.
  • Результат:
    • Сформований опис предметної області, який необхідно зареєструвати в відповідному сервісі бізнес-схеми.

Реалізація

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

import {setEntryPoint} from "@x-fiber/proton";

import {BusUsersAggRouter} from "./BusUsers.agg.router";
import {BusUsersAggValidator} from "./BusUsers.agg.validator";
import {BusUsersAggTypeormRepo} from "./BusUsers.agg.typeorm-repo";
import {BusUsersReqTypeormSchema} from "./BusUsers.agg.typeorm-schema";
import {BusUsersAggDictEn} from "./BusUsers.agg.dict.en";
import {BusUsersAggDictRu} from "./BusUsers.agg.dict.ru";
import {BusUsersAggDictUa} from "./BusUsers.agg.dict.ua";


type BusDomains =
| 'BusUsersAgg'
| 'BusUsersAuthSpec'
| 'BusUsersRolesSpec'
| 'BusUsersRolesPermissionsSpec'

export const BusUsersAggEP = setEntryPoint<BusDomains>("BusUsersAgg", {
typeormSchema: BusUsersReqTypeormSchema,
typeormRepo: BusUsersAggTypeormRepo,
router: BusUsersAggRouter,
dictionaries: [BusUsersAggDictEn, BusUsersAggDictRu, BusUsersAggDictUa],
validators: BusUsersAggValidator,
});

Реєстрація

Щоб успішно використовувати описаний функціонал предметної області, "Реєстр" предметної області повинен бути зареєстований в перелік предметних областей сервісу

import {setService} from '@x-fiber/proton';
import {BusUsersAggEP} from './domains/BusUsers/BusUsersAggReg.reg.ts';

export const BusinessAdminService = setService('BusinessAdmin', [BusUsersAggEP]);