Агенти
Агенти функціональності розкривають функціонал, необхідний для створення бізнес-схеми. Вони володіють функціоналом для створення бізнес-схеми та забезпечують доступ до інших документів у межах бізнес-схеми. Це відбувається завдяки структурним модулям ядра відображень, які можуть бути активовані та використані у контексті конкретного бізнес-процесу, а також зберіганню ядром відображень знімка бізнес-схеми.
Архітектура
Сервіси, провайдери та інші функціональні компоненти першого рівня абстракції ядра відображень впроваджуються у відповідні агенти
доступності, які описують перелік методів для створення бізнес-схеми. Після цього відбувається розгортання
відповідних просторів імен, де детально описуються ці методи. Кожен простір імен включає в себе методи лише одного
функціонального модуля. Наприклад, методи, пов'язані з конфігурацією, будуть доступні лише у просторі імен під
назвою discovery.
Агент бізнес-схеми, який ми називаємо schemaAgent, має простішу структуру, оскільки він лише описує методи, пов'язані з управлінням бізнес-схемою.
Перелік агентів
Наразі у X-Fiber підтримуються наступні функціональні агенти:
- Агент функціональності
fnAgent: агент забезпечу є доступ до функціоналу побудови бізнес-логіки, такого як створення запитів у базу даних, можливість шифрування, логування та інше. - Агент бізнес-схеми
schemaAgent: агент забезпечує доступ до інших документів поточної або інших прикладних областей в рамках одного сервісу.
Наразі в активній розробці та в релізі v2.0.0 будуть також впроваджені слідуючі агенти:
- Агент інтеграцій iAgent: агент надає доступ до інтеграційних рішень, таких як
Mabbox,Firebaseтощо.
Реалізація
Реалізація, наприклад, агента функціональності виглядає наступним чином:
import { inversify } from '~packages'
import { CoreSymbols } from '~symbols'
import type {
IFunctionalityAgent,
NFunctionalityAgent,
IDiscoveryService,
KeyConfigLiteralBuilder,
AnyObject
} from '~types'
const { injectable, inject } = inversify
@injectable()
export class FunctionalityAgent implements IFunctionalityAgent {
constructor(
@inject(CoreSymbols.DiscoveryService)
private readonly _discoveryService: IDiscoveryService,
// ... other inject structure
) {}
public get discovery(): NFunctionalityAgent.Discovery {
return {
getMandatory: <T extends string | number | boolean, C extends AnyObject>(
name: KeyConfigLiteralBuilder<C, T>
) => {
return this._discoveryService.getSchemaMandatory<T, C>(name);
},
getString: <C extends AnyObject>(
name: KeyConfigLiteralBuilder<C, string>,
def: string
): string => {
return this._discoveryService.getSchemaString<C>(name, def);
},
getNumber: <C extends AnyObject>(
name: KeyConfigLiteralBuilder<C, number>,
def: number
): number => {
return this._discoveryService.getSchemaNumber<C>(name, def);
},
getBoolean: <C extends AnyObject>(
name: KeyConfigLiteralBuilder<C, boolean>,
def: boolean
): boolean => {
return this._discoveryService.getSchemaBoolean<C>(name, def);
},
getArray: <T extends string | number | boolean, C extends AnyObject>(
name: KeyConfigLiteralBuilder<C, Array<T>>,
def: Array<T>
): Array<T> => {
return this._discoveryService.getSchemaArray<T, C>(name, def);
},
};
}
// ... other fucntionality namespaces
}