#asynchronous #uml #diagram
Вопрос:
Я новичок в диаграммах последовательностей и изо всех сил пытаюсь понять, как разметить асинхронные потоки.
Вот синхронный поток HTTP:
@startuml
"Purchase" -> "Auth" : Check user
"Auth" --> "Purchase" : 2s
"Purchase" -> "Payment" : Deduct balance
"Payment" --> "Purchase" : 2s
"Purchase" -> "Provision" : Supply
@enduml
Давайте представим, что последний шаг «Обеспечения» является асинхронным. Как бы это лучше всего выразить? Только ответы?
"Purchase" -> "Auth" : Check user
"Auth" --> "Purchase" : 2s sync
"Purchase" -> "Payment" : Deduct balance
"Payment" --> "Purchase" : 2s sync
"Purchase" -> "Provision" : Supply
"Provision" --> "Purchase" : 0s async
@enduml
https://plantuml.com/demo-javascript-asynchronous это инструмент для предварительного просмотра диаграммы.
Комментарии:
1. Схема последовательности-это последовательность и время, поэтому асинхронные потоки на самом деле не очень хорошо вписываются в парадигму, потому что время отклика по определению является внешним по отношению к вашему дизайну (иначе вы бы знали, какова была последовательность). Где асинхронный ответ будет перехватывать вашу последовательность? Я полагаю, вы могли бы заблокировать последовательность до тех пор, пока ответ не вернется, эффективно сделав ее синхронной?
2. асинхронность выполняется на уровне сообщения о вызове, а не для его ответа
3. обратите внимание, что в ваших примерах все сообщения асинхронны, потому что головки стрелок открыты, plantuml не позволяет создавать синхронные сообщения, совместимые со стандартом UML, вы можете просто использовать
->
и->>
, но у обоих головка открыта4. Хм, может быть, UML мертв news.ycombinator.com/item?id=26934831
Ответ №1:
Ну, UML знает асинхронные сообщения. Просто используй их.
В PlantUML обозначения не всегда соответствуют спецификации UML. Однако есть два разных наконечника стрел. Я бы интерпретировал ->>
как асинхронное сообщение.
Асинхронные сообщения не могут содержать ответное сообщение. Конечно, получатель такого сообщения может позже ответить другим асинхронным сообщением. Однако это возможно только в том случае, если первое сообщение явно содержало ссылку на отправителя. Для синхронных сообщений это подразумевается.
Пожалуйста, обратите внимание, что схема последовательностей обычно не определяет все возможные последовательности. Время ответа может находиться вне системы. Тем не менее, вы можете показать последовательность, в которой требуется 2 секунды, 60 секунд или даже никогда не отвечает. Это всего лишь три разные последовательности.
Кстати, официальная запись для метки ответного сообщения такова assignment target=message name:return value
. Если это ясно из контекста, вы можете опустить метку. Он не предназначен для того, чтобы делать утверждения о продолжительности.
Комментарии:
1. другое асинхронное сообщение может быть также синхронным, хотя и немного непрактичным и маловероятным. Я думаю, что другое сообщение было бы более точным.
2. На самом деле продолжительность-это тайм-ауты. Как вы выражаете тайм-ауты? ха-ха
3. Можно определить, что время между двумя событиями на линиях жизни должно находиться в определенных пределах. Это можно показать двумя горизонтальными линиями, начинающимися с вхождений и соединенными двойной стрелкой и ограничением диапазона. В вашем случае это было
{0..2 s}
бы так . Я не знаю, поддерживает ли это PlantUML.
Ответ №2:
отказ от ответственности: Я автор ZenUML, поэтому мой ответ может быть предвзятым. Хотя стараюсь не быть таким.
- Асинхронное сообщение (messageSort равно asynchCall или asynchSignal) имеет открытую головку со стрелкой.
- В заголовке стрелки появилось синхронное сообщение (messageSort равно synchCall). из UML2.5.1 формальный-17-12-05 (раздел 17.4.4.1)
PlantUML, похоже, не имеет определенного синтаксиса для синхронизации или асинхронного сообщения. Чтобы соответствовать спецификации, вы можете использовать разные стрелки: ->
для сообщений синхронизации и ->>
для асинхронных сообщений.
ZenUML использует точку (например Purchase->Provision.Supply
) для сообщений синхронизации и столбец (например Purchase-Provision:Supply
) для асинхронных сообщений. ZenUML также включает панель выполнения для автоматической синхронизации сообщений.
Вот как это выглядит в ZenUML с использованием return
ключевого слова:
Комментарии:
1.
yay -Ss zenuml
не имеет никаких результатов, поэтому я не могу рассматривать это. Почему бы не создать нормальный интерфейс командной строки с открытым исходным кодом? Я думаю, что это поможет продвинуть ваш плагин confluence.2. Я не нашел времени, чтобы завернуть его в cli. Вам это интересно?
3. Что ж, мне интересно, хотя речь идет о том, чтобы сделать ваше программное решение более привлекательным.
4. Благодарю. Я оставил сообщение в твоем Твиттере. Давайте продолжим разговор там. Спасибо.