Skip to content

Commit dd08770

Browse files
Merge pull request #1 from rpiontik/main
Update from parent
2 parents 0ded77b + 385788e commit dd08770

27 files changed

Lines changed: 761 additions & 4 deletions

File tree

README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99
* Развитие практик применения DocHub;
1010
* Формирование базы знаний для создания прикладных метамоделей.
1111

12-
## Каталог
12+
## Каталог примеров
1313

14-
1. [Пример создания пользовательской метамодели C4 Model](src/C4Model)
15-
2. [Простой пример валидации сущностей в DocHub с выводом информации в меню](src/validator_example)
16-
3. [Пример управления бизнес-сущностями](src/business_entity_management)
14+
1. [Создание пользовательской метамодели C4 Model](src/C4Model)
15+
2. [Валидации сущностей в DocHub с выводом информации в меню](src/validator_example)
16+
3. [Управление бизнес-сущностями](src/business_entity_management)
17+
4. [Пример сущности для бизнес-процессов](src/sequences_entity_example)
18+
5. [Динамические контексты](src/DynamicContext)
1719

1820

1921
## Разворачивание

dochub.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
imports:
22
# Пример создания метамодели для описания в нотации C4 Model
33
- src/C4Model/dochub.yaml
4+
# - src/validator_example/dochub.yaml
5+
# - src/business_entity_management/dochub.yaml
6+
# - src/sequences_entity_example/dochub.yaml
7+
# - src/DynamicContext/dochub.yaml

src/DynamicContext/README.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Пример создания динамического контекста
2+
3+
**Цель примера:** Познакомить с возможностями создания динамических [контекстов](https://dochub.info/docs/dochub.contexts),
4+
т.е. контекстов, данные для которых генерируются в результате выполнения
5+
[JSONata](https://jsonata.org/) запросов.
6+
7+
# Суть примера
8+
Иногда требуется обогатить контекст дополнительной информацией или, напротив,
9+
оптимизировать его представление.
10+
11+
В некоторых случаях требуется полностью динамический контекст,
12+
наполненный виртуальными компонентами, являющимися производной
13+
от базовой информации.
14+
15+
Данный пример генерирует архитектурные контексты уровня L1 на базе
16+
данных архитектуры уровня L2.
17+
18+
Результат рендеринга описанной архитектуры уровня L2:
19+
20+
![L2](./images/l2.png)
21+
22+
Сгенерированное представление уровня L1:
23+
24+
![L2](./images/l1.png)
25+
26+
## Файловая структура примера
27+
* components - данные архитектуры для рендеринга
28+
* components.yaml - компоненты уровня L2
29+
* root.yaml - корневой манифест данных архитектуры
30+
* contexts - архитектурные контакты;
31+
* l1.yaml - манифест контекста уровня L1
32+
* l2.yaml - манифест контекста уровня L2
33+
* root.yaml - корневой манифест контекстов
34+
* images - картинки для настоящей документации
35+
* dochub.yaml - корневой манифест примера
36+
37+
## Использование
38+
В меню плагина DocHub выберите пункты "L1" или "L2"
39+
40+
![Меню](./images/menu.png)
41+
42+
Вносите изменения в данные архитектуры в файлах каталога [components/](./components).
43+
Наблюдайте изменения в рендеринге плагина DocHub.
44+
45+
## Задания для практики
46+
* Добавьте определения направления связей между компонентами L1 уровня;
47+
* Реализуйте дрилдаун компонентов L1 в L2.
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
components:
2+
# Описываем L2
3+
4+
# **************************************
5+
# Платежный шлюз (payments)
6+
# **************************************
7+
# Здесь даем общую информацию о системе.
8+
# Детали будем собирать автоматически из L2
9+
payments:
10+
title: Платежи
11+
entity: component
12+
13+
# Подробно описываем L2
14+
payments.gateway:
15+
title: Шлюз
16+
entity: component
17+
links:
18+
- title: API
19+
id: payments.backend
20+
payments.backend:
21+
title: Микросервис оплаты
22+
entity: component
23+
links:
24+
- id: payments.db
25+
payments.db:
26+
title: База платежей
27+
entity: database
28+
29+
# **************************************
30+
# Подсистема заказов (orders)
31+
# **************************************
32+
# Аналогично, даем общую информацию
33+
orders:
34+
title: Заказы
35+
entity: component
36+
37+
# Подробно описываем L2
38+
orders.gateway:
39+
title: Шлюз
40+
entity: component
41+
links:
42+
- title: API
43+
id: orders.backend
44+
orders.backend:
45+
title: Микросервис заказов
46+
entity: component
47+
links:
48+
- id: orders.db
49+
- id: payments.gateway
50+
title: Оплаты
51+
- id: auth.backend
52+
title: Авторизация
53+
orders.db:
54+
title: База заказов
55+
entity: database
56+
57+
# **************************************
58+
# Подсистема авторизации (auth)
59+
# **************************************
60+
auth:
61+
title: Авторизация
62+
entity: component
63+
auth.gateway:
64+
title: Шлюз
65+
entity: component
66+
links:
67+
- title: API
68+
id: auth.backend
69+
auth.backend:
70+
title: Микросервис авторизации
71+
entity: component
72+
links:
73+
- id: auth.db
74+
auth.db:
75+
title: База пользователей
76+
entity: database
77+
78+
# **************************************
79+
# Фронтэнд (front)
80+
# **************************************
81+
# Пользовательское приложение описываем
82+
# только на L2
83+
front:
84+
entity: component
85+
title: Приложение
86+
links:
87+
- id: orders.gateway
88+
- id: auth.gateway
89+
90+
# **************************************
91+
# Описываем актора
92+
# **************************************
93+
customer:
94+
entity: actor
95+
title: Клиент
96+
links:
97+
- id: front
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
imports:
2+
# Подключаем компоненты архитектуры уровня L2
3+
- components.yaml
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
contexts:
2+
L1:
3+
title: Автогенерация L1
4+
location: L1
5+
components:
6+
# Выбираем все компоненты на первом уровне
7+
- "*"
8+
# Готовим данные для контекста
9+
source: >
10+
(
11+
/* Определяем шаблон для идентификаторов */
12+
$isl2 := /^([^\.]*)(\.([^\.]*))?$/;
13+
/* Генерируем список компонентов L1 ровня */
14+
$result := $mergedeep($.components.$spread().(
15+
$id := $keys()[0];
16+
$node := $.*;
17+
$levels := $isl2($id).groups;
18+
/* Формируем ноду */
19+
$node :=
20+
/* Если это компонент уровня L2 */
21+
$levels[2]
22+
/* Создаем виртуальный компонент L1 с информацией о связях */
23+
? $merge([
24+
{
25+
$levels[0]: {
26+
"links":
27+
$distinct($node.links.{
28+
/* Преобразуем идентификатор связи к L1 */
29+
"id": $split(id, ".")[0],
30+
"title": title,
31+
"direction": "--"
32+
})[id != $levels[0]]
33+
}
34+
}
35+
])
36+
/* Иначе, преобразуем связи компонента к уровню L1 */
37+
: $merge([
38+
{
39+
$id: $merge([$.*, {
40+
"links":
41+
$distinct($node.links.{
42+
/* Преобразуем идентификатор связи к L1 */
43+
"id": $split(id, ".")[0],
44+
"title": title,
45+
"direction": "--"
46+
})[id != $levels[0]]
47+
}])
48+
}
49+
])
50+
));
51+
/* Перезаписываем данные манифеста новыми компонентами */
52+
$merge([$,
53+
{ "components": $result}
54+
]);
55+
)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
contexts:
2+
L2:
3+
title: L2 уровень
4+
location: L2
5+
components:
6+
- "*.*" # Отбираем все компоненты второго уровня
7+
- customer
8+
- front
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
imports:
2+
# Подключаем автоматически генерируемые контексты уровня L1
3+
- l1.yaml
4+
# Подключаем модифицируемые контексты уровня L2
5+
- l2.yaml

src/DynamicContext/dochub.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
imports:
2+
# Подключаем компоненты L2 уровня
3+
- components/root.yaml
4+
# Подключаем контексты
5+
- contexts/root.yaml

src/DynamicContext/images/l1.png

17.8 KB
Loading

0 commit comments

Comments
 (0)