Здравствуйте. Эта статья — небольшой обзор инструмента, который помогает разбираться с устройством и структурой данных пакетов и классов внутри СУБД Cache.
Если кратко, его миссия — выполнить визуализацию класса или целого пакета, показать связи между классами и предоставить максимум информации будь-то программисту или тимлиду без надобности отправляться в Студию и смотреть там программный код.
Тех, кто обучается или ведёт обучение по технологиям InterSystems, днями просматривает или изменяет коды разных проектов и просто заинтересованным лицам — приглашаю ознакомиться с Cache Class Explorer!
Cache — мультимодельная СУБД. К ней можно обращаться как с помощью запросов на языке SQL с некоторыми расширениями, так и взаимодействовать с хранимыми объектами и процедурами через интерфейсы для различных языков программирования. Третий же вариант — это напрямую разрабатывать приложение на родном для СУБД языке — Cache ObjectScript (COS).
Cache поддерживает классы на уровне СУБД. Существует два основных типа классов: Persistent, которые могут хранится в базе данных, и Registered, которые не хранятся в БД, а выполняют роль программ и обработчиков. Так же есть ряд особых типов: Serial (классы, которые могут быть встроены в Persistent классы для создания сложных типов данных, таких как, например, адреса), DataType (создают пользовательский тип данных), Index, View и Stream.
Cache Class Explorer — инструмент, который визуализирует структуру классов Cache в диаграмму, показывает зависимости между классами и всю необходимую информацию, включая код методов, запросов, xData-блоков, комментарии, документацию и ключевые слова разных элементов класса. Для отображения Class Explorer использует модифицированную нотацию UML, потому что в Cache присутствует целое разнообразие сущностей, которые в стандартной нотации UML не предусмотрены, но имеют важное значение для Cache: запросы, xData-блоки, множество ключевых слов для методов и свойств (таких как System, ZenMethod, Hidden, ProcedureBlock и другие), отношения parent-child, one-many, типы классов и так далее.
Чтобы составить максимально правильное понимание того, о чём будет рассказываться дальше, следует сперва посмотреть, как выглядит отображённый пакет, и, заодно, интерфейс Class Explorer. Для примера, возьмём пакет Cinema из пространства имён SAMPLES:
В Cache Class Explorer (1.14.3) можно:
В левой части приложения находится дерево пакетов. Чтобы нарисовать весь пакет, нужно нажать на кнопку в правой части имени пакета при наведении на него. Чтобы отобразить отдельный класс и все зависимые от него классы, нужно в этом дереве его просто выбрать.
Class Explorer может отобразить несколько видов зависимостей между классами:
Если навести курсором на связь, то у класса будут подсвечены поля, которые эту связь и создают. Важно отметить, что Class Explorer не будет “углубляться” и рисовать зависимости тех классов, которые находятся вне текущего пакета, он нарисует только один класс. “Углубляться” без конца он будет только в классы, которые находятся в текущем пакете — если нужно это ограничить, воспользуйтесь настройкой “Dependency level”.
Сам класс отображается в виде прямоугольника, разделённого на 6 секций:
По-умолчанию класс отображается с множеством графических иконок, толкование которых вы можете посмотреть нажав на кнопку Help. Если же нужна более-менее строгая нотация UML, то их отображение, как и отображение любых секций класса можно отключить в настройках.
Если диаграмма достаточно большая и не знакомая, можно воспользоваться быстрым поиском по диаграмме. Класс, который содержит любую часть введённого ключевого слова будет выделен. Чтобы перейти к классу со следующим совпадением, просто ещё раз нажмите Enter или кнопку поиска.
Ну и напоследок, отредактировав диаграмму, удалив все ненужные связи и разместив элементы для достижения желаемого вида, её можно сохранить, нажав на самую левую нижнюю кнопку.
Для того, чтобы установить Cache Class Explorer, нужно всего лишь импортировать последний релиз в любую область. После успешного импорта у вас должно появится веб-приложение
Можно посмотреть, как Class Explorer работает в области SAMPLES/USER: демонстрация. Так же есть небольшой видео-обзор по проекту. Любые отзывы, предложения или комментарии приветствуются — оставляйте их в корпоративном репозитории. Приятного использования!
Если кратко, его миссия — выполнить визуализацию класса или целого пакета, показать связи между классами и предоставить максимум информации будь-то программисту или тимлиду без надобности отправляться в Студию и смотреть там программный код.
Тех, кто обучается или ведёт обучение по технологиям InterSystems, днями просматривает или изменяет коды разных проектов и просто заинтересованным лицам — приглашаю ознакомиться с Cache Class Explorer!
Введение про Cache
Cache — мультимодельная СУБД. К ней можно обращаться как с помощью запросов на языке SQL с некоторыми расширениями, так и взаимодействовать с хранимыми объектами и процедурами через интерфейсы для различных языков программирования. Третий же вариант — это напрямую разрабатывать приложение на родном для СУБД языке — Cache ObjectScript (COS).
Cache поддерживает классы на уровне СУБД. Существует два основных типа классов: Persistent, которые могут хранится в базе данных, и Registered, которые не хранятся в БД, а выполняют роль программ и обработчиков. Так же есть ряд особых типов: Serial (классы, которые могут быть встроены в Persistent классы для создания сложных типов данных, таких как, например, адреса), DataType (создают пользовательский тип данных), Index, View и Stream.
А теперь про Class Explorer
Cache Class Explorer — инструмент, который визуализирует структуру классов Cache в диаграмму, показывает зависимости между классами и всю необходимую информацию, включая код методов, запросов, xData-блоков, комментарии, документацию и ключевые слова разных элементов класса. Для отображения Class Explorer использует модифицированную нотацию UML, потому что в Cache присутствует целое разнообразие сущностей, которые в стандартной нотации UML не предусмотрены, но имеют важное значение для Cache: запросы, xData-блоки, множество ключевых слов для методов и свойств (таких как System, ZenMethod, Hidden, ProcedureBlock и другие), отношения parent-child, one-many, типы классов и так далее.
Чтобы составить максимально правильное понимание того, о чём будет рассказываться дальше, следует сперва посмотреть, как выглядит отображённый пакет, и, заодно, интерфейс Class Explorer. Для примера, возьмём пакет Cinema из пространства имён SAMPLES:
О функциональности
В Cache Class Explorer (1.14.3) можно:
- Отобразить иерархию пакетов, диаграмму класса или целый пакет;
- Редактировать внешний вид диаграммы после отображения;
- Сохранить текущее изображение диаграммы классов;
- Запоминать текущий вид диаграммы и восстанавливать его при следующем отображении;
- Проводить поиск по любым ключевым словам, отображённым на диаграмме или в дереве классов;
- При помощи всплывающих подсказок получать полную информацию о классах, их свойствах, методах, параметрах, запросах и xData-блоках;
- Просматривать программный код методов, запросов или xData-блоков;
- Включать или отключать отображение любых элементов диаграммы, включая графические иконки.
Подробности и обзор возможностей
В левой части приложения находится дерево пакетов. Чтобы нарисовать весь пакет, нужно нажать на кнопку в правой части имени пакета при наведении на него. Чтобы отобразить отдельный класс и все зависимые от него классы, нужно в этом дереве его просто выбрать.
Class Explorer может отобразить несколько видов зависимостей между классами:
- Конечно же наследование. Оно отображается зарисованной белой стрелкой в направлении наследуемого класса;
- “Ассоциацию”, или связь между классами. Если поле одного из классов содержит тип другого класса, на диаграмме будет отображена такая связь;
- Parent-Child и One-Many отношения: правила соблюдения целостности данных.
Если навести курсором на связь, то у класса будут подсвечены поля, которые эту связь и создают. Важно отметить, что Class Explorer не будет “углубляться” и рисовать зависимости тех классов, которые находятся вне текущего пакета, он нарисует только один класс. “Углубляться” без конца он будет только в классы, которые находятся в текущем пакете — если нужно это ограничить, воспользуйтесь настройкой “Dependency level”.
Сам класс отображается в виде прямоугольника, разделённого на 6 секций:
- Название класса: наведя курсор мыши на название класса, можно узнать, когда он был создан и модифицирован, посмотреть комментарий и все присвоенные ему ключевые слова. Щелчок по заголовку класса откроет документацию;
- Параметры класса: все присвоенные параметры с их типами, ключевыми словами и комментариями;
- Свойства класса, всё как и с параметрами. Надписи, выделенные курсивом имеют всплывающую подсказку;
- Методы: на любой метод можно нажать и посмотреть исходный код этого метода, синтаксис будет подсвечен;
- Запросы: так же, как и методы — на них можно нажать и просмотреть код запроса;
- xData-блоки: блоки, в основном, содержащие информацию в XML. Нажатие покажет отформатированный исходный код.
По-умолчанию класс отображается с множеством графических иконок, толкование которых вы можете посмотреть нажав на кнопку Help. Если же нужна более-менее строгая нотация UML, то их отображение, как и отображение любых секций класса можно отключить в настройках.
Если диаграмма достаточно большая и не знакомая, можно воспользоваться быстрым поиском по диаграмме. Класс, который содержит любую часть введённого ключевого слова будет выделен. Чтобы перейти к классу со следующим совпадением, просто ещё раз нажмите Enter или кнопку поиска.
Ну и напоследок, отредактировав диаграмму, удалив все ненужные связи и разместив элементы для достижения желаемого вида, её можно сохранить, нажав на самую левую нижнюю кнопку.
Установка
Для того, чтобы установить Cache Class Explorer, нужно всего лишь импортировать последний релиз в любую область. После успешного импорта у вас должно появится веб-приложение
hostname/ClassExplorer/
(косая черта в конце необходима).Детальная инструкция по установке
- Загрузите архив с последним релизом Cache Class Explorer
- Распакуйте архив и извлеките XML-файл Cache/CacheClassExplorer-vX.X.X.xml;
- Импортируйте пакет в любую область одним из следующих способов:
- Перетащите XML-файл на открытую студию;
- Через портал управления: Обозреватель системы -> Классы -> Импорт, и укажите путь к файлу;
- Командой в терминале: do ##class(%Installer.Installer).InstallFromCommandLine(“путь/Installer.cls.xml”);
- Просмотрите лог импорта — если всё хорошо, веб-приложение будет доступно по адресу hostname/ClassExplorer/. Если же что-то пошло не так, — прочитайте об этом, и убедитесь, что:
- У вас достаточно прав для импорта пакета в данную область;
- У пользователя веб-приложения достаточно прав для перехода в различные области;
- При ошибке 404 — что вы поставили косую черту в конце адресной строки.
И напоследок — как это выглядит
Под спойлером - графика
Всплывающие подсказки:
Поиск по диаграмме:
Просмотр исходного кода методов:
Просмотр исходного кода xData-блоков:
Поиск по диаграмме:
Просмотр исходного кода методов:
Просмотр исходного кода xData-блоков:
Можно посмотреть, как Class Explorer работает в области SAMPLES/USER: демонстрация. Так же есть небольшой видео-обзор по проекту. Любые отзывы, предложения или комментарии приветствуются — оставляйте их в корпоративном репозитории. Приятного использования!
Delphinum
Если код уже написан, зачем может понадобится UML?
morisson
Эта штука решает, когда в руки попадается чей-то проект, который нужно сопровождать. И иногда просто нужно понять, а «что эти ребята вообще натворили с базой и кодом???» Помогает также мгновенный поиск по сущностям и элементам классов.
Ну и еще юз-кейс — качнуть вот отсюда например какой-нибудь проект, и глянуть на структутру. Сразу видно где UI, где классы хранения — как на картинке вверху про пакет Cinema: синенькие классы — UI, песочные — хранимые.