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

Завантажувачі

інформація

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

Архітектура

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

loader-arch.svg

warning

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

Застосування

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

Приклад опису завантажувача бізнес-схеми виглядає так:

import { inversify } from '~packages'
import type { NSchemaLoader } from '~types'

const { injectable } = inversify

@injectable()
export class SchemeLoader implements ISchemeLoader {
// other class structure

public setBusinessLogic(services: ServiceStructure[]): void {
services.forEach((service) => {
service.domains.forEach((domain) => {
const name = domain.domain;
const {documents} = domain;

this._setDomain(name);
if (documents.router) {
this._setRoute(name, documents.router);
}
if (documents.dictionaries) {
this._setDictionaries(name, documents.dictionaries);
}
if (documents.emitter) {
this._setEmitter(name, documents.emitter);
}
if (documents.wsListener) {
this._setWsListener(name, documents.wsListener);
}
if (documents.typeormSchema) {
this._setTypeormSchema(name, documents.typeormSchema);
}
if (documents.typeormRepo && documents.typeormSchema) {
this._setTypeormRepository(
name,
documents.typeormSchema.model,
documents.typeormRepo
);
}

if (documents.validators) {
this._setValidator(name, documents.validators);
}

this._applyDomainToService(service.service, domain.domain);
});
});
}

private _applyDomainToService(service: string, domain: string): void {
const sStorage = this.services.get(service);
if (!sStorage) {
this.services.set(
service,
new Map<string, NSchemaLoader.DomainStorage>()
);
this._applyDomainToService(service, domain);
return;
}

const dStorage = this._domains.get(domain);
if (!dStorage) {
throw new Error(`Domain ${domain} not found`);
}

sStorage.set(domain, dStorage);
}

// other class structure
}

де:

  • SchemeLoader - клас завантажувачі бізнес-схеми.
  • setBusinessLogic - публічний метод для передачі групи сервісів з бізнес-схеми.
  • _applyDomainToService - приватний метод створення запису нової прикладної області