948просмотров
79.1%от подписчиков
16 февраля 2026 г.
📷 ФотоScore: 1.0K
Удобная работа с классами в PlantUML Неймспейсы растут, схемы усложняются, связи «плывут»? Наш ведущий бэкенд-разработчик Лев Лейман нашёл способ упростить жизнь в PlantUML буквально парой строк и вывести схемы на новый уровень. Передаём ему слово 👇 «Если вы пользуетесь PlantUML и часто готовите схемы классов, то наверняка сталкивались со сложностью группировки классов (class) в пакеты (package). Чаще всего проблема возникает из-за длинных неймспейсов. Они добавляют лишние вложенность и шум, а сами классы по ходу правок иногда приходится таскать из одного пакета в другой. Все это делает правки трудоемкими и скучными. Пока имена классов уникальные — их связь можно описать, просто используя имена. Обычно так и есть, но бывает и обратное. package Sberhealth { package Example { class RootClass package Long { package Namespace { class YourClass } } package Another { class NewClass } }
}
"YourClass" -right-> "NewClass" Конечно, можно немного оптимизировать количество пакетов, «схлопнув» пустые пакеты в один вручную. В команде мы договорились использовать слэш «/», это почти как в привычном PHP, нам удобно. Теперь схема становится компактнее и легче читается, особенно в формате картинки. package Sberhealth/Example { class RootClass package Long/Namespace { class YourClass } package Another { class NewClass }
}
"YourClass" -right-> "NewClass" Но со временем структура усложняется: приходится менять что-то в пакетах, появляются классы с одинаковыми именами. Такую связь только по имени классов уже не описать. К счастью, к имени класса можно добавить пакет(ы) через разделитель (по-умолчанию — точка), указав полный путь. Это решает проблему связи, но как же громоздко выглядит. package Sberhealth/Example { class RootClass package Long/Namespace { class YourClass } package Another { class YourClass }
}
"Sberhealth/Example.Long/Namespace.YourClass" -right-> "Sberhealth/Example.Another.YourClass" Перемещение класса из одного пакета в другой влечет и замену пути во всех связях, и чем их больше — тем выше шанс что-то пропустить или потерять. В итоге схема может вообще развалиться и придется долго искать, где же что не так. В итоге решение оказалось простым — теперь мы добавляем всего пару строк в начале схемы и избавляемся от всех этих сложностей. set namespaceSeparator /
!pragma useIntermediatePackages false Достаточно описать класс, используя полное имя (включая все нужные пакеты, например /Sberhealth/Example/RootClass). На пакеты все будет разделено автоматически и оптимальным образом. Связь описывается полным именем класса, оно длинное, но теперь оно написано одной строкой и не надо его «высчитывать». set namespaceSeparator /
!pragma useIntermediatePackages false class /Sberhealth/Example/RootClass
class /Sberhealth/Example/Long/Namespace/YourClass
class /Sberhealth/Example/Another/YourClass "/Sberhealth/Example/Long/Namespace/YourClass" -right-> "/Sberhealth/Example/Another/YourClass" Забирайте, пользуйтесь.
И поделитесь в комментариях своими приемами работы с PlantUML и насколько сложные схемы вы когда-либо делали.»