Структура бізнес-схеми
Бізнес-схема базується на одному чи групі сервісів які утворюють JavaScript Map колекцію, яка складається з набору
різноманітних функціональних компонентів. Кожен сервіс представляє собою також JavaScript Map колекцію, що включає в
себе назву конкретної прикладної області, що інтегрується в межах бізнес-схеми. Кожна прикладна область, у свою чергу,
охоплює ряд документів та інформаційних ресурсів, необхідних для ефективного функціонування відповідної сфери діяльності
в межах бізнес-системи.
Фактично бізнес-схема складається з чотирьох рівнів:
- Рівень сервісів.
- Рівень прикладних областей.
- Рівень документів прикладної області.
- Рівень опису документа.
Рівень сервісів
Рівень сервісів відображається у вигляді 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
}
}
Навіть у випадку, коли присутній лише один сервіс, використовується 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] }