Инструкция skinparam responseMessageBelowArrow в PlantUML по задумке авторов определяет способ размещения подписи ответного сообщения на диаграмме последовательности. При значении false текст размещается над стрелкой (классический вариант, который является дефолтным), а при значении true — над стрелкой. Если вы пользуетесь этой инструкций, то следующая информация для вас.
☝️Предусловие. Вы используете следующую инструкцию:
skinparam responseMessageBelowArrow true
В простых примерах всё работает ожидаемым образом, однако представим ситуацию, что требуется отразить следующую логику.
Система A вызывает систему B (A -> B), от которой ждёт ответ. Однако в некоторых случаях системе B для подготовки ответа может потребоваться обратиться к системе А (переспросить пользователя, дозапросить недостающие данные и т.п.), т.е., образно говоря, формируется малая петля взаимодействия внутри большой петли.
Вы наверняка напишите B -> A (а не B --> A), чтобы проиллюстрировать семантику запроса, но движок PlantUML воспримет вызова системы A как ответ (ранее ведь A вызывал B) и сделает подпись под стрелкой. А ответ A --> B, следуя той же самой логике, он воспримет как новый запрос и подпишет стрелку сверху. Это точно не соответствует задумке.
Я поэкспериментировал и пришёл к заключению, что движок PlantUML в целях отработки инструкции responseMessageBelowArrow тупо ориентируется на порядок следования участников взаимодействия (actor, participant и пр.). И тот участник, что левее, всегда воспринимается вызывающим, а тот, кто справа, — вызываемым. Можно, конечно, A и B переставить местами, но тогда придётся читать диаграмму справа налево, что неудобно, и, более того, подпись к исходному вызову A -> B будет снизу... В общем, универсального решения не нашёл, надеюсь, что когда-нибудь это исправят.
#визуализация #plantuml
