Диаграмма последовательности: фоновая петля

Я работаю над системой (B), которая связывается с другой системой (C) и отображает вычисленные значения в непрерывном цикле на терминале (A). (A) просит (B) сообщить о переменной x, (B) делает это без блокировки, так что (B) может продолжать иметь дело с (C). Позже (A) просит (B) также сообщить о переменной y, который будет обслуживаться (B) таким же образом.

Для документации мне нужно создать диаграмму последовательности UML (используя plantuml) описание процесса. Моя проблема сейчас в том, как правильно его смоделировать. Связь между (B) и (C) продолжается, даже если цикл еще не завершен. Но как мне смоделировать это правильно?

Вот вариант 1, просто используя асинхронный ответ в цикле:

@startuml
A ->> B: report x
loop
    B -->> A: x
end loop
B -> C: foo
C --> B: bar
A ->> B: report y
loop
    B -->> A: y
end loop
B -> C: qux
C --> B: baz
@enduml

введите описание изображения здесь

Вариант 2 работает с условием, которое становится верным позже в процессе:

@startuml
A ->> B: report x
loop until reporting x ends
    B -->> A: x
end loop
B -> C: foo
C --> B: bar
A ->> B: report y
loop until reporting y ends
    B -->> A: y
end loop
B -> C: qux
C --> B: baz
B -->> A: end reporting x
B -->> A: end reporting y
@enduml

введите описание изображения здесь

Вариант 2 более явный. Но правильно ли любой из двух вариантов обозначает процесс под рукой?

1 ответ

Решение

Возможно, они оба правы. SD показывает конкретный взгляд на процесс. Поскольку время является линейным (забудьте о тех квантовых скачках здесь), и у вас нет параллельных процессов, у вас будет один объект, отправляющий или получающий сообщение в одно время, и ничего параллельно. Вам решать, какую последовательность вы представляете. Вероятно, вам нужно больше, чем одна последовательность, чтобы получить половину четкого изображения.

Чтобы показать действительно параллельные процессы, вам понадобятся две временные линии (например, если у вас два параллельных процессора и две вилки одного и того же процесса, работающие параллельно). При необходимости вы можете добавить временные ограничения и показать, что некоторые вещи (почти) параллельны.

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

Другие вопросы по тегам