Skip to content

Commit 962d453

Browse files
authored
Merge pull request #18 from apoddubny/main
Возможность описывать связи в новом формате
2 parents f2434ef + 322c43e commit 962d453

8 files changed

Lines changed: 882 additions & 0 deletions

File tree

src/new_links_format/README.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Пример модификации метамодели для описания связей в новом формате
2+
3+
**Цель примера:**
4+
1. Предоставить пример модификации метамодели
5+
2. Предоставить новый способ описания связей между сущностями
6+
7+
# Суть примера
8+
В примере реализован новый вид описания связей между сущностями. Задействованы механизмы изменения метамодели, кастомных сущностей(entity) и датасетов.
9+
10+
# Формат
11+
Связь в данном примере описывается в следующем формате:
12+
```yaml
13+
links:
14+
front.app-orders.backend:
15+
from: front.app
16+
to: orders.backend
17+
via:
18+
- orders.gateway
19+
title: Передача заказа
20+
contract: dh.contract.id
21+
22+
front.web-orders.backend:
23+
from: front.web
24+
to: orders.backend
25+
via:
26+
- orders.gateway
27+
title: Передача заказа
28+
```
29+
Обязательными являются только параметры from/to. Новый параметр via позволяет отметить шлюз, через который работает связь между компонентами не создавая при этом двух отдельных сущностей.
30+
31+
# Особенности
32+
1. Связь между компонентами - это отдельный объект, который можно расширить.
33+
2. Несколько связей между компонентами на схемах группируется в одну. При клике по такой связи мы попадаем на страницу со списком.
34+
3. В SELF контексте компонента будут отображены все связи, которые у него существуют. Неважно при этом где они описаны. Также будут показаны связи, которые проходят через шлюзы.
35+
4. Все связи всплывают наверх, если вы используете модель DDD, при всплытии также происходит группировка.
36+
5. Работает ТОЛЬКО с plantUML представлением.
37+
6. Корректно работает в случае указания элемнтов разного уровня на контекстной диаграмме. При этом прозводительность упадет.
38+
39+
# Подключение:
40+
1. Заменить файлы, находящиеся в папке metamodel/dochub/entities/contexts на файлы в соотвествующей папке из примера.
41+
2. Использовать converter.json, которые сделает первичную конвертацию из формата старых ссылок в новый формат.
42+
3. Подключить файлы entities/links.yaml и datasets/links.yaml в архитектуру
43+
4. Добавить полученные данные в свойство "links:"
44+
5. Старые связи можно не удалять
45+
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
(
2+
$links := $.components.$spread().(
3+
$id := $keys()[0];
4+
$l := *.links;
5+
$l.(
6+
$f := $contains(direction, "<");
7+
$f ? {
8+
"from": id,
9+
"to": $id,
10+
"title": title,
11+
"contract": contract
12+
} : {
13+
"from": $id,
14+
"to": id,
15+
"title": title,
16+
"contract": contract
17+
}
18+
)
19+
);
20+
$links{from & "-" & to:{
21+
"from": from,
22+
"to": to,
23+
"title": title,
24+
"contract": contract
25+
}}
26+
)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
datasets:
2+
links:
3+
source: >
4+
(
5+
$c := $.components;
6+
[
7+
$.links.$spread().(
8+
$d:=*.$;
9+
$contract := $d.contract ? "/entities/docs/blank?dh-doc-id=" & $d.contract : "";
10+
$from := $lookup($c, $d.from);
11+
$to := $lookup($c, $d.to);
12+
$url := $d.title;
13+
{
14+
"about": $url,
15+
"from_link": "/architect/components/" & $d.from,
16+
"to_link": "/architect/components/" & $d.to,
17+
"from": $d.from,
18+
"to": $d.to,
19+
"via": $d.via,
20+
"contract": $contract
21+
}
22+
)
23+
]
24+
)

src/new_links_format/dochub.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
imports:
2+
- entites/links.yaml
3+
- datasets/links.yaml
4+
- example.yaml
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
entities:
2+
links:
3+
menu: >
4+
(
5+
[{
6+
"location": "Документы/Взаимодействия",
7+
"link": "entities/links/mainlist"
8+
}]
9+
)
10+
schema:
11+
properties:
12+
tables:
13+
type: object
14+
patternProperties:
15+
# Определяем шаблон идентификаторов контекстов
16+
^([a-zA-Z\\_0-9]*)\.([a-zA-Z\_0-9]*).([a-zA-Z\_0-9]*)$:
17+
type: object
18+
properties:
19+
description:
20+
type: string
21+
owners:
22+
type: array
23+
required:
24+
- description
25+
- owners
26+
presentations:
27+
filtered:
28+
type: table
29+
headers:
30+
- value: about
31+
text: Описание взаимодействия
32+
sortable: true
33+
link: contract
34+
- value: from
35+
text: От
36+
sortable: true
37+
link: from_link
38+
- value: to
39+
text: К
40+
sortable: true
41+
link: to_link
42+
origin: links
43+
source: >
44+
(
45+
$from := $params.from != "" ? $params.from : "";
46+
$to := $params.to != "" ? $params.to : "";
47+
[$[$contains(from, $from) and $contains(to, $to)]]
48+
)
49+
mainlist:
50+
type: table
51+
headers:
52+
- value: about
53+
text: Описание взаимодействия
54+
sortable: true
55+
link: contract
56+
- value: from
57+
text: От
58+
sortable: true
59+
link: from_link
60+
- value: to
61+
text: К
62+
sortable: true
63+
link: to_link
64+
origin: links
65+
source: ($)

src/new_links_format/example.yaml

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
links:
2+
front.app-orders.backend:
3+
from: front.app
4+
to: orders.backend
5+
via:
6+
- orders.gateway
7+
title: Передача заказа
8+
9+
front.web-orders.backend:
10+
from: front.web
11+
to: orders.backend
12+
via:
13+
- orders.gateway
14+
title: Передача заказа
15+
16+
front.app-auth.backend:
17+
from: front.app
18+
to: auth.backend
19+
via:
20+
- auth.gateway
21+
title: Авторизация
22+
23+
front.web-auth.backend:
24+
from: front.web
25+
to: auth.backend
26+
via:
27+
- auth.gateway
28+
title: Авторизация
29+
30+
orders.backend-payments.backend:
31+
from: orders.backend
32+
to: payments.backend
33+
via:
34+
- payments.gateway
35+
title: Оплата
36+
payments.backend-payments.db:
37+
from: payments.backend
38+
to: payments.db
39+
40+
orders.backend-orders.db:
41+
from: orders.backend
42+
to: orders.db
43+
44+
orders.backend-auth.backend:
45+
from: orders.backend
46+
to: auth.backend
47+
title: Авторизация
48+
contract: notfounddocument
49+
50+
auth.backend-auth.db:
51+
from: auth.backend
52+
to: auth.db
53+
54+
components:
55+
# Описываем L2
56+
57+
# **************************************
58+
# Платежный шлюз (payments)
59+
# **************************************
60+
# Здесь даем общую информацию о системе.
61+
# Детали будем собирать автоматически из L2
62+
payments:
63+
title: Платежи
64+
entity: component
65+
66+
# Подробно описываем L2
67+
payments.gateway:
68+
title: Шлюз
69+
entity: component
70+
payments.backend:
71+
title: Микросервис оплаты
72+
entity: component
73+
links:
74+
- id: payments.db
75+
payments.db:
76+
title: База платежей
77+
entity: database
78+
79+
# **************************************
80+
# Подсистема заказов (orders)
81+
# **************************************
82+
# Аналогично, даем общую информацию
83+
orders:
84+
title: Заказы
85+
entity: component
86+
87+
# Подробно описываем L2
88+
orders.gateway:
89+
title: Шлюз
90+
entity: component
91+
orders.backend:
92+
title: Микросервис заказов
93+
entity: component
94+
orders.db:
95+
title: База заказов
96+
entity: database
97+
98+
# **************************************
99+
# Подсистема авторизации (auth)
100+
# **************************************
101+
auth:
102+
title: Авторизация
103+
entity: component
104+
auth.gateway:
105+
title: Шлюз
106+
entity: component
107+
auth.backend:
108+
title: Микросервис авторизации
109+
entity: component
110+
auth.db:
111+
title: База пользователей
112+
entity: database
113+
114+
# **************************************
115+
# Фронтэнд (front)
116+
# **************************************
117+
# Пользовательское приложение
118+
front:
119+
title: Фронтальные компоненты
120+
entity: component
121+
122+
front.web:
123+
entity: component
124+
title: Веб-сайт
125+
126+
front.app:
127+
entity: component
128+
title: Приложение
129+
130+
contexts:
131+
L2:
132+
title: L2 уровень
133+
location: L2
134+
components:
135+
- "*.*" # Отбираем все компоненты второго уровня
136+
L1:
137+
title: L1 уровень
138+
location: L1
139+
components:
140+
- front
141+
- auth
142+
- orders
143+
- payments

0 commit comments

Comments
 (0)