S
SberHealth ИТ
@sberhealthIT1.2K подп.
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 и насколько сложные схемы вы когда-либо делали.»
948
просмотров
3127
символов
Нет
эмодзи
Да
медиа

Другие посты @sberhealthIT

Все посты канала →
Удобная работа с классами в PlantUML Неймспейсы растут, схем — @sberhealthIT | PostSniper