gifts2017

Обработка "Вызовы общих модулей" (8.2)

Опубликовал Дмитрий Кутырев (lnnr) в раздел Программирование - Практика программирования

Обработка анализирует код общих модулей конфигурации и позволяет получать следующие отчёты: процедуры и функции общих модулей по количеству их вызовов из других общих модулей конфигурации, количество вызовов других общих модулей из данного общего модуля, схема взаимодействия общих модулей.

Обработка анализирует код общих модулей конфигурации (выгруженный в текстовые файлы с помощью ключа командной строки /DumpConfigFiles) и позволяет получать следующие отчёты:

  1. Процедуры и функции общих модулей по количеству их вызовов из других общих модулей конфигурации. Показатель можно применять для выявления потенциально наиболее востребованных процедур и функций с целью оптимизации их работы в системах критичных к производительности. Полезно, например, при крупном внедрении с заранее неизвестными и неотлаженными бизнес-процессами (когда мы не можем определить реально наиболее востребованные процедуры и функции), либо при создании типового тиражируемого решения.
  2. Количество вызовов других общих модулей из данного общего модуля. Большое количество вызовов других модулей — один из показателей сложности модуля (Высокий коэффициен разделения по выходу — более 7-ми в примере С. Макконела (Совершенный код, С. Макконнелл, Code Complete, 2-ое издание, 2005) по взаимодействию классов), возможно следует разделить функционал модуля на несколько модулей.
  3. Схема взаимодействия общих модулей. Схема (карта) вызовов строится как расшифровка к двум отчётам обработки двойным щелчком по названию модуля. Карта строится в MS Excel. Карта представляет из себя схему взаимодействия расшифровываемого модуля с другими общими модулями: модули, которые вызывают данный модуль, модули, которые вызывает данный модуль и связи между этими модулями.

Деление кода между общими модулями носит, как правило, функционально-прикладной (деление на модули с флагами Клиент, Сервер, ВнешнееСоединение и т.п.) и логический характер. При этом модули разделённые по функциональным причинам (например АдресныйКлассификатор, АдресныйКлассификаторКлиент, АдресныйКлассификаторКлиентСервер) образуют единый логический блок. Логическое деление производится для эффективного управления сложностью исходного кода конфигурации.

Если модуль взаимодействует с логически (но не функционально) связанными с ним модулями по принципу "все вызывают всех", то выгода от их деления исчезает (подробнее см. Совершенный код, С. Макконнелл, Code Complete, 2-ое издание, 2005, стр. 80 на примере подсистем). Энтропия в таких системах только возрастает, что приводит к сложностям в сопровождении. Нормальная схема взаимодействия логически разделённых модулей должна быть ациклическим графом.

 Особенности и ограничения работы

 1. Исходные коды модулей выгружаются с помощью команды системы:

ПутьКПрограмме+"1cv8.exe DESIGNER /F """+ПутьКБазе+""""+СтрокаПользователя+" /DumpConfigFiles """+ПутьККаталогуДляВыгрузки+""" -Module"

Можно выгрузить самому, либо с помощью кнопки "Выгрузить" в обработке. Использование команды системы влечёт за собой соответствующие ограничения, остающиеся на совести пользователя обработки: у пользователя должны быть права на запись в каталог выгрузки, на чтение в каталоге базы. У пользователя 1С, под которым запускается обработка, должны быть права на запуск Конфигуратора анализируемой базы и т.п.

Ограничение: На данный момент выгрузка исходных кодов работает с файловыми базами и пользователем без пароля.

По кнопке "Полная карта вызовов" можно постросить полную схему взаимодействия общих модулей конфигурации. Практической ценности данная функция не несёт ввиду большого количества модулей в типовых конфигурациях и сложности их взаимодействия. Ценность исключительно "эстетическая".

Nota bene: Обработка писалась для себя, также тестировал на УТ 11, БП 3.0 (ознакомительной). Пока на правах бета версии. Если что-либо из моих рассуждений покажется неоднозначным — всегда готов к дискуссии в комментариях.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
ВызовыОбщихМодулей.epf
.epf 20,90Kb
26.01.12
40
.epf 20,90Kb 40 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Vladimir (Boroda) 30.01.12 21:51
Дмитрий, вы говорите "По кнопке "Полная карта вызовов" можно постросить полную схему взаимодействия общих модулей конфигурации. Практической ценности данная функция не несёт ввиду большого количества модулей в типовых конфигурациях и сложности их взаимодействия". Но меня сразу же привлекла именно эта возможность увидеть структуру взаимодействия модулей в конфе. Считаю, что это очень полезно на начальном этапе освоения 8-ки.
Интересно, а можно ли формировать структуру взаиможействия модулей произвольно, по выбору? Если да, то как?
2. Дмитрий Кутырев (lnnr) 31.01.12 13:23
(1) Boroda,
Но меня сразу же привлекла именно эта возможность увидеть структуру взаимодействия модулей в конфе. Считаю, что это очень полезно на начальном этапе освоения 8-ки.
Сам так думал, но связей слишком много получается если по всей конфигурации строить - просто нечитабельно становится.
Интересно, а можно ли формировать структуру взаиможействия модулей произвольно, по выбору? Если да, то как?
На данный момент два варианта: полная карта и как расшифровка отчета по какому-либо модулю (модуль, связанные с ним и все связи между ними). Про функцию карты по произвольному списку модулей подумаю.
3. Владимир Чаклин (vec435) 01.02.12 09:43
в догонку к boroda - указать какой-то объект метаданных и получить все вызовы общих модулей для него
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа