Несколько лет назад мне довелось проектировать один достаточно сложный заказной модуль в DIRECTUM. Был написан краткий техпроект, описывающий в текстовой форме структуру справочников модуля, их взаимосвязи, взаимодействие друг с другом. На первый взгляд, все казалось логичным. Однако, когда модуль был реализован и начал использоваться, обнаружилось, что некоторые сущности дублируют друг друга, отличаясь лишь местом и незначительными особенностями использования. Не то чтобы с этим нельзя было работать, но меня, как проектировщика, такая ситуация огорчила.
Тогда я задумался - какие инструменты могли бы мне помочь найти подобные ошибки на этапе проектирования или хотя бы на ранних стадиях разработки. Проанализировав возможные причины ошибки при проектировании, в моем случае я остановился на двух:
Каким образом избавиться от влияния этих причин? Конечно, очень много зависит и от опыта проектировщика, и от качественного рецензирования, но представим, что разработчик проекта предоставлен самому себе и он не настолько гуру, чтобы держать весь проект в голове. Очевидно, что графическая схема сущностей сильно бы помогла. Она позволила бы повысить наглядность, но, во-первых, создание такой схемы трудоемкая (и, по-моему, достаточно скучная) задача, а во-вторых, изменяющиеся требования заставляют эту схему еще и постоянно актуализировать. Разумеется, хорошо бы было получать такую схему каким-либо автоматическим способом.
Первое что пришло на ум и было под рукой - MS Visio 2007. Позволяет строить схемы и, что очень важно, имеет собственный механизм оптимизации расположения блоков. Удалось набросать следующий сценарий - у пользователя запрашивается список интересующих его справочников, по ним строится схема взаимосвязей в Visio. Что включает в себя схема проще всего понять из способа ее построения:
Таким образом, получается своего рода рекурсия, способная вытащить на схему все справочники, напрямую или косвенно связанные с выбранными.
Вот как это выглядит, например, для справочника "Подразделения" с уровнем вложенности 1 (т.е. только те справочники, которые используются справочником "Подразделения" и те, которые используют данный справочник). Синие стрелки - связь 1 к нескольким, зеленые стрелки 1 ко многим (табличная часть).
Кстати, можете попробовать выгрузить все справочники DIRECTUM и получить полную схему. Картина получится впечатляющая. Примерно то же самое произойдет, если запустить сценарий для любого справочника с максимальной глубиной вложенности. На схему попадут практически все справочники DIRECTUM, т.к. большинство справочников так или иначе взаимосвязаны.
Это лишь концепт, демонстрирующий возможности работы с Visio из DIRECTUM. В данном сценарии, например, места для развития хоть отбавляй - механизм анализирует только реквизиты, а мог бы еще и события, иногда полезно строить схему и по использованию какой-то функции в различных сущностях. Да и много еще чего полезного можно придумать. На основании тех же принципов можно написать сценарии построения схем не метаданных, а самих данных (например, древовидную структуру предприятия).
P.S. Работает в Visio 2007, 2010.
Сценарий для DIRECTUM 4.5 и старше (импорт через компоненту "Сценарии"): VisioSchemeBuilderExample.xml (11,78 Кб)
VisioSchemeBuilderExample.zip (5,27 Кб) не открывается. Ошибка 404.
Там кроме самого сценария еще что-то есть?
Исправил один недочет, который обнаружил сразу после публикации (на схему добавлялись только те справочики, которые использовались в выбранных справочниках, но не выводились те, которые используют выбранные справочники). Теперь работает правильно.
Еще добавил возможность выбора глубины вложенности. Чем больше число - тем более "дальние" справочники будут попадать на схему.
Как-то не удалось увидеть замечательной картинки. Через некоторое время после запуска:
Запрошенная операция сейчас отключена. Сценарий "BRD_VisioSchemeBuilderExample": ошибка в строке 180.
Ну поэтому я и говорю что это скорее концепт чем законченный инструмент. Пришлось обходить несовместимость строкового типа в Visio и вариантного в ISBL странным способом - через Excel. Обратите внимание на следующую переменную в коде сценария:
CLIPBOARD_DELAY = "'0:0:0:300'" //Пауза для корректной работы буфера обмена в форате 'ч:м:с:мс'. Если появляется ошибка "Requested operations is currently disabled", увеличить значение
дошёл до 10 сек, появляется ошибка всё ещё. видимо, значение по умолчанию несколько оптимистично:)
да, я извиняюсь, а к чему такие сложности? не проще ли использовать GraphViz?
Очень может быть, что и проще, спасибо за наводку. Никогда с этим пакетом в жизни не сталкивался. Интересно было бы попробовать. Судя по всему, действительно очень подходящий для данной задачи инструмент.
Вот так благодаря требовательным пользователям получается улучшить то, за что иначе бы я никогда и не взялся. Взглянул на код еще раз, заглянул в справку по Visio и неожиданно понял, что есть и более человечные методы, чем копирование текста через буфер обмена. А ведь когда писал - и так пробовал, и эдак - не нашел. В общем, обновил сценарий еще раз - теперь никакого Excel и никаких пауз.
Кстати, как одно из направлений развития: довольно интересно сделано построение подобной диаграммы в TFS (Team Foundation Server). На диаграмме классы (в нашем случае это будут справочники, функции и т.д.) соединяются между собой различной толщины стрелками (чем толще, тем чаще один класс обращается к другому). По слишком тонким стрелкам можно выявить потенциальные недочеты в архитектуре системы.
Авторизуйтесь, чтобы написать комментарий