Группировки в диаграммах последовательности

Коротко, что это?

Группировка нужна для того, чтобы как‑то осмысленно скомпоновать сообщения, а также для того, чтобы наложить определенные правила для отдельно взятых сообщений. Вот все существующие типы группировок в sequence диаграммах:

  • alt – альтернативные сценарии, с обязательным выполнением по принципу исключающего ИЛИ;
  • opt – опциональные(необязательные) сценарии;
  • par – обязательные параллельные сценарии, то есть сценарии с выполнением по принципе И;
  • loop – обязательный сценарий с повторным выполнением;
  • group – группировка для объединения выборки сообщений например по смыслу;
  • break – группировка для сценария с завершением, работает по принципу оператора return в функциях;
  • critical – группировка для описания фрагмента, который должен иметь только один поток, выполняющийся в один заход(например, запись в БД в одну и ту же таблицу).

Их я хочу разделить на 2 категории, те группировки, которые я постоянно использую при проектировании диаграмм или хотя бы встречаю, и те, которые я не использую и не встречаю в диаграммах коллег. В своей статье я уже разбирал группировки по отдельности с описанием синтаксиса и демонстрацией визуализии. Поэтому в этот раз я создам шуточный процесс взаимодействия микросервисов с использованием сразу всех группировок:

Пример со всеми группировками
Пример со всеми группировками

Ну и, конечно же, исходный код, куда без него:

@startuml actor b as "Browser" participant w as "Web Request Handler" participant g as "GPT Service" participant c as "Calculation Service" participant u as "User Service" database db as "User Service DB" participant f as "Food Service" participant d as "Drink Service" autonumber group Обработка потребностей пользователя b -> w++: Хочу поужинать w -> g++: Клиент хочет ужин g --> w--: Дополнительные вопросы для\nвыявления потребностей w --> b--: Дополнительные вопросы для\nвыявления потребностей end group Формирование идеального результата b -> w++: Ответы на все дополнительные\nвопросы break Клиент передумал w --> b: Завершение работы end w ->> g++: Ответы на все дополнительные\nвопросы g -> g: Формирование точечного\nподбора по запросам g ->> c--++: Данные для формирования ужина c -> u++: Запрос данных клиента u -> db: Запрос данных клиента db --> u: Данные клиента ||| opt Если были новые данные = true critical u -> db: Внесение новых данных end end u --> c--: Данные клиента par c -> f++: Тип еды, каллорийность, данные клиента f -> f: Подбор предварительных блюд по параметрам f --> c--: Возможные блюда c -> d++: Запрос на напиток alt Алкогольный=true d --> c: Corona Extra ||| else Газированный=true d --> c: Coca-Cola ||| else Успокаивающий d --> c--: Чай. Молочный улун ||| end end loop Подсчет БЖУ и каллорий для каждого блюда c -> c: Обработка блюда end c ->> w--: Идеальный ужин w --> b--: Идеальный ужин end @enduml
11
Начать дискуссию