Обновить

Пишу диаграммы последовательностей текстом (кодом). Вы тоже можете

Время на прочтение5 мин
Охват и читатели68K
Всего голосов 29: ↑29 и ↓0+29
Комментарии42

Комментарии 42

Любопытно, нужно попробовать.

Могу еще посоветовать Python-библиотеку diagrams для рисования диаграмм кодом. Для меня рисовать в draw.io на трекпаде ноутбука - то еще мучение, а кодом все получается гораздо прощи и - что важнее - можно версионировать в репозитории и потом править.

Спасибо за рекомендацию библиотеки! Для меня и мышью рисовать то еще удовольствие) В статье я тоже кратко упомянул, что к проекту можно подключить Git и поддерживать там версионность.

В draw.io тоже можно писать на PlantUml такие диаграммы

Привык пользоваться draw.io как "рисовалкой".
Может там тоже удобно текстом описывать. Не пробовал.
Возможность выбора - это прекрасно!)

Где там этот редактор спрятан?

Спросил у ИИ.
Его ответ:
"В draw.io нет прямой поддержки ввода кода PlantUML, но вы можете использовать встроенные библиотеки фигур UML для визуального создания диаграмм, которые затем могут быть похожи на диаграммы, созданные с помощью PlantUML."

Следующий этап http://mermaid.live вместо plantumUML (мермэйд например нативно в github mardown поддерживается) что сильно упрощает хранение документации в одном месте

Спасибо! Почитаю.
В статье я тоже кратко упомянул, что к проекту можно подключить Git 

GitLab поддерживает PlantUML.
Прям в md-файле можно написать

```plantuml Bob -> Alice : hello Alice -> Bob : hi ```


Кроме того ЕМНИП в PlantUML асортимент разных диаграм больше чем в Mermaid. Не знаю Mermaid, поэтому не могу судить как сейчас обстоит ситуация. Когда давно стоял выбор между разными системами, именно количесвто разных диаграмм перевесил чашу весов в сторону PlantUML.

Благодарю, был не вкурсе!

В случае с хранением uml-диаграмм в таком виде в GitLab возникает ещё один плюс от использования PlantUML - версионирование, а точнее - возможность увидеть изменения между версиями.

Ровно эта же проблема прямо сейчас вызывает у нас с коллегой боль) Спасибо за решение, обязательно попробуем!

)) так эта статья и "родилась"!
После очередных правок всплыла в мозге информация, что что-то я слышал про описание диаграмм текстом и пошел гуглить.

Попробуйте.
К инструменту есть понятная документация, приведена в конце статьи.

Постоянно использую https://sequencediagram.org:

  1. Не требует доп софта. Работает в браузере

  2. Тектом описывается диаграмма

  3. Можно шарить диаграммы обычной ссылкой

Спасибо, что поделились своим опытом!
Посмотрю указанный ресурс.

PlantumUML редакторы есть в онлайн версиях.
В статье привожу пример 3х онлайн редакторов известных мне.

и там можно мышкой потыкать и добавлять элементы на диаграмму, а не текстом

text-to-diagram.com - тут можно сравнить разные инструменты для отрисовки диаграмм

Класс! Возьму на заметку. Спасибо!

Отказался от диаграмм последовательностей в пользу BPMN.

BPMN для описания интеграций?
Какие преимущества для себя нашли в таком подходе?

Описываете в формате "Отправка сообщения" -> "Получение сообщения" + отдельные пулы для систем?
В такой схеме скрываете части БП, которые не участвуют в интеграции?

Использую для описания сценариев, в которых участвует несколько сервисов, а сам сценарий содержит несколько путей выполнения.

Главное преимущество BPMN: хорошая читаемость даже в сложных сценариях. Диаграммы последовательностей становятся нечитаемой после первого же блока с условиями.

Отправки сообщений обычно не использую, а просто рисую стрелочки с подписями. Для систем отдельные пулы.

Части БП обычно не скрываю, но могут отобразить их как подпроцесс.

тоже так делаю. Но у нас на проекте условие, что все диаграммы в BPMN. не считаю, что это правильно, хотя иногда выглядит нагляднее.

А что можно было бы использовать для описания кодом диаграмм бизнес-процессов? Где несколько акторов (swim lanes), блоки условий и вот это вот всё?

В PlantumUML помимо диаграмм последовательностей можно и другие UML диаграммы строить. Например, activity diagram

Сколько минут уйдёт чтоб написать код "свою первую схему" ?

В обычном редакторе за 5-15 минут такую же схему можно нарисовать.

Обычный редактор (yEd) тоже сохраняет в текстовом виде например формат .graphml
Изменять можно прям текст, в том числе массово много файлов если надо.

У нас тож есть поклонник Mermaid (PlantumUML), но я так и не понял преимущества.

Дело привычки и вкусов.
Я на момент знакомства с PlantumUML уже работал в VS Code и поставил расширение именно для него.

дело то не в первой схеме.
А в том, что схемы надо править, поддерживать изменения (версионирование). Но если сразу текстом не очень привычно, то вот есть https://sequencediagram.org:

Я программист и тоже иногда использую plantuml, но есть у него огромный минус (для меня) - нельзя сместить элемент так как мне нужно

Тут да. Можно только задать логику отображения данных.

Graphviz также есть в homebrew, поэтому, если лень возиться с портами можно поставить через `brew install graphviz`
Ну и без sudo

Да, это альтернативный вариант установки Graphviz.
Я пробовал запустить установку через "brew", но что-то у меня без дополнительных настроек не пошла установка, а разбираться в этом подходе к установке не стал. Помогла настройка портов.

puml очень просто генерить. Например, из всяких реестров при помощи vba. И это прекрасно)

Из текста диаграмма это хорошо. А обратная задача? Мне не хватало, и решил сделать: diagramhacker.ru

не понятно как этим инструментом пользоваться

Нужно загрузить в него диаграмму в формате drawio (кнопка "Открыть"), и он выведет: в левой панели саму диаграмму, в средней таблицу объектов (вершины графа диаграммы пока, ребра не выводятся), а в правой - описание в формате markdown.

Для справки сделал тестовую диаграмму, в которой описал идею сервиса в виде диаграммы - она загружается по умолчанию. Редактировать саму диаграмму в сервисе нельзя, только атрибуты объектов.

Можно менять сортировку, добавлять атрибуты, в атрибутах хранить дополнительную информацию, которая может выводиться в описание.

Был такой инструмент - bpwin, в нем можно было делать модели в IDEF0, и по моделям генерировать документацию. Сейчас этого не хватает, особенно если учесть, что нотаций разных много, и часто требуется описание диаграммы в документ вставлять. А поскольку формат drawio - это xml, то я подумал, что в нем можно это делать, тем более что он позволяет дополнять диаграмму пользовательскими атрибутами, которые доступны по Ctrl+M из самого drawio. Можно нарисовать диаграмму в drawio, загрузить в сервис, дополнить ее нужными атрибутами (по кнопке (+) в средней панели можно добавить любые атрибуты ко все объектам диаграммы сразу), настроить вывод, и можно сказать, что документ готов. В таблице на средней панели можно отредактировать значения атрибутов, или сохранить диаграмму и отредактировать их непосредственно в drawio (выделить объект, нажать Ctrl+M и заполнить значения для атрибутов объекта).

Пока не все виды фигур отображаются корректно (убился с рендерингом), но основные фигуры работают.

Спасибо за пояснения!

Спасибо огромное за статью! Открыли глаза на очень крутой инструмент!

Попробовал в деле, почитал мануал.

Заметил такой момент

activate и deactivate используются чтобы обозначить активацию участника.
Линия существования появляется в момент активации участника.
activate и deactivate применяются к предыдущему сообщению.

Т.е. в вашем примере должно быть вот так?

      Client -> UI: Запрос 1
activate Client

      UI -> Back: Запрос от клиента
activate UI

Добрый день! Да в мануале так написано.
Просто в примере из Мануала нет активации пользователя при взаимодействии с системой.

Я активирую пользователя ДО момента отправки запроса, т.е. пользователь для отправки запроса должен быть активирован.
Сервис получающий запрос, должен быть активирован ДО получения направленного ему запроса, соответственно так и формируется логика.

Сервис получающий сообщение должен быть активирован сразу после того, как система отправитель направила запрос.

Ваш кусок кода в примере может выглядеть так:

activate Client 
' клиент создан, чтобы отправить запрос

Client -> UI: Запрос 1 
activate UI 
' UI создан, чтобы получить запрос

UI -> Back: Запрос от клиента 
activate Back 
' Back создан, чтобы получить запрос

У меня так и построен запрос, просто переносы не как в мануале, мне так удобней.

Если без комментариев по тексту (для наглядности), то запрос такой:

activate Client 

Client -> UI: Запрос 1 
activate UI 

UI -> Back: Запрос от клиента 
activate Back 

Спасибо за статью! Я написал большой промпт чтобы научить Gemini писать код для этиз диаграмм в plantum. Он переводит мои тексты в диаграмму. Если будете так делать, обязательно вставляйте в промпт примеры работающего кода, иначе будут постоянные ошибки синтаксиса. У ChatGPT такой проблемы не заметил. При этом визуально сгенерированная диаграмма почему-то различается у разных ИИ, хотя оба используют plantum.

Добрый день. Значит не зря писал.
Поделитесь шаблоном промпта?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
www.company.rt.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия
Представитель
Vatuhaa