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

Структура бізнес-схеми

інформація

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

примітка

Фактично бізнес-схема складається з чотирьох рівнів:

  1. Рівень сервісів.
  2. Рівень прикладних областей.
  3. Рівень документів прикладної області.
  4. Рівень опису документа.

Рівень сервісів

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

type Services = Map<string, Domains>;

де:

  • Services - Map колекція JavaScript сервісів
  • string - строкова назва сервісу, який повинен бути унікальним.
  • Domains - Map колекція JavaScript прикладних областей, які входять в відповідний сервіс.

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

Map(1) 
'BusinessAdmin' => Map(5) {
'BusUsersAgg' => {
routes: [Map],
emitter: Map(0) {},
mongoHandlers: Map(0) {},
typeormModel: 'BUS_USERS_AGG'
typeormSchema: [Function (anonymous)],
typeormHandlers: [Map],
helpers: Map(0) {},
validators: [Map],
dictionaries: [Map],
},
'BusUsersAuthSpec' => {
routes: [Map],
emitter: Map(0) {},
mongoHandlers: Map(0) {},
typeormHandlers: Map(0) {},
helpers: Map(0) {},
validators: [Map],
dictionaries: [Map],
}
// ... other domains
}
}
warning

Навіть у випадку, коли присутній лише один сервіс, використовується Map колекція, яка міститиме лише один елемент.

Рівень прикладних областей

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

type Domains = Map<string, Domain>;

де:

  • Domains - Map колекція JavaScript сервісів
  • string - строкова назва сервісу, який повинен бути унікальним.
  • Domain - тип структури переліку можливих документів прикладної області.

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

Map(5) {
'BusUsersAgg' => {
routes: Map(1) { '{1{v1}2}{2{get-one}2}{3{GET}3}' => [Object] },
emitter: Map(0) {},
mongoHandlers: Map(0) {},
typeormModel: 'BUS_USERS_AGG'
typeormSchema: [Function (anonymous)],
typeormHandlers: Map(1) { 'create' => [AsyncFunction: create] },
helpers: Map(0) {},
validators: Map(1) { 'signup' => [Function: signup] },
dictionaries: Map(3) { 'en' => [Object], 'ru' => [Object], 'ua' => [Object] },
},
'BusUsersAuthSpec' => {
routes: Map(2) {
'{1{v1}1}{2{signup}2}{3{POST}3}' => [Object],
'{1{v1}1}{2{login}2}{{POST}3}' => [Object]
},
emitter: Map(0) {},
mongoHandlers: Map(0) {},
typeormHandlers: Map(0) {},
helpers: Map(0) {},
validators: Map(2) {
'v1SignupParams' => [Function: v1SignupParams],
'v1LoginParams' => [Function: v1LoginParams]
},
dictionaries: Map(3) { 'en' => [Object], 'ua' => [Object], 'ru' => [Object] },
},
}

Рівень документів прикладної області

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

type Domain = {
routes: Map<string, Route>;
helpers: Map<string, HelperHandler>;
mongoModel?: string;
mongoSchema?: SchemaFn<unknown>;
mongoHandlers: Map<string, AnyFunction>;
typeormModel?: string;
typeormSchema?: SchemaFn<unknown>;
typeormHandlers: Map<string, AnyFunction>;
validators: Map<string, Validator>;
dictionaries: Map<string, Dictionary>;
emitter: Map<string, Emitter>;
};

де:

  • routes - Map колекція JavaScript, в якій перелічуються структура http запитів (за відсутності буде створена пуста колекція).
  • emitter - Map колекція JavaScript, в якій перелічуються структура ws подій (за відсутності буде створена пуста колекція).
  • mongoModel - назва моделі MongoDB (опціонально, та може бути додана разом з описом схеми колекції).
  • mongoSchema - опис схеми колекції MongoDB (опціонально, та може бути додана разом з назвою колекції).
  • mongoHandlers - Map колекція JavaScript з переліком методів по роботі з колекцією цієї ж прикладної області (за відсутності буде створена пуста колекція).
  • typeormModel - назва SQL таблиці бази даних (опціонально, та може бути додана разом з описом схеми SQL таблиці).
  • typeormSchema - опис структури SQL таблиці бази даних (опціонально, та може бути додана разом з назвою SQL таблиці).
  • typeormHandlers - Map колекція JavaScript з переліком методів по роботі з SQL таблицею цієї ж прикладної області (за відсутності буде створена пуста колекція).
  • helpers - Map колекція JavaScript з переліком загальних методів (за відсутності буде створена пуста колекція).
  • validators - Map колекція JavaScript з переліком методів валідації даних (за відсутності буде створена пуста колекція).
  • dictionaries - Map колекція JavaScript з переліком словників перекладу з відповідністю то конкретної мови перекладу (за відсутності буде створена пуста колекція).
{
routes: Map(2) {
'{1{v1}1}{2{signup}2}{3{POST}3}' => {
path: 'signup',
method: 'POST',
handler: [AsyncFunction: handler],
scope: 'public:route',
params: []
query: {}
headers: {}
version: 'v1'
},
'{1{v1}1}{2{login}2}{3{POST}3}' => {
path: 'login',
method: 'POST',
handler: [AsyncFunction: handler],
scope: 'public:route',
params: []
query: {}
headers: {}
version: 'v1'
}
},
emitter: Map(0) {},
mongoHandlers: Map(0) {},
typeormHandlers: Map(0) {},
helpers: Map(0) {},
validators: Map(2) {
'v1SignupParams' => [Function: v1SignupParams],
'v1LoginParams' => [Function: v1LoginParams]
},
dictionaries: Map(3) {
'en' => { signup: [Object] },
'ua' => { signup: [Object] },
'ru' => { signup: [Object] }
},
}

Рівень опису документа

Маршрутизатор

Map(2) {
'{1{v1}1}{2{signup}2}{3{POST}3}' => {
path: 'signup',
method: 'POST',
handler: [AsyncFunction: handler],
scope: 'public:route',
params: []
query: {}
headers: {}
version: 'v1'
},
'{1{v1}1}{2{login}2}{3{POST}3}' => {
path: 'login',
method: 'POST',
handler: [AsyncFunction: handler],
scope: 'public:route',
params: []
query: {}
headers: {}
version: 'v1'
}
},

Еміттер

Брокер

Модель MongoDB

[Function (anonymous)]

Репозиторій MongoDB

Map(1) { 'create' => [AsyncFunction: create] }

Схема TypeORM

[Function (anonymous)]

Репозиторій TypeORM

Map(1) { 'create' => [AsyncFunction: create] }

Словник

Map(3) {
'en' => {
signup: {
success: 'Registration was successful',
exists: 'A user with this login or email has already been created.'
}
},
'ua' => {
signup: {
success: 'Реєстрація пройшла успішно',
exists: 'Користувач з таким логіном або поштою вже створений.'
}
},
'ru' => {
signup: {
success: 'Реестрация произошла успешно',
exists: 'Пользователь с таким логином или електронной почтой уже создан.'
}
}
}

Валідатор

Map(2) {
'v1SignupParams' => [Function: v1SignupParams],
'v1LoginParams' => [Function: v1LoginParams]
}

Помічник

Map(1) { 'getFullName' => [Function: getFullName] }