Структура бізнес-схеми
Бізнес-схема базується на одному чи групі сервісів які утворюють 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] }