-
Может кому пригодится
https://sourceforge.net/projects/zcad/files/podgb.7z/downloadСтроит полную зависимость модулей и вычленяет из нее "циклические" зависимости.
Результат выдает в виде
DiGraph Classes
визуализировать его можно в graphviz`е или онлайн
http://www.webgraphviz.comНадписи у ребер - количество оставшихся циклических зависимостей если эту зависимость устранить. импорта проектов с делфи нет, только из лазаря, но можно выкрутится использовав
File=/путь/к/проекту/*.pas;*.dpr
Paths=/путь/к/проекту/
Compiler options=-Sd -Fi/путь/к/проекту/include
-
А в какая от этого практическая польза? Циклические зависимости и компилятор вполне успешно вычисляет.
-
>>А в какая от этого практическая польза?
Имхо полезно при рефакторинге видеть как оно взаимодействует.
>>Циклические зависимости и компилятор вполне успешно вычисляет.
Я дельфи давно невидел, емнип он раньше молча глотал циклические зависимости (те что в implementation ессно, те что в interface - ошибка). Сейчас он генерирует варнинги на это дело?
-
Сейчас он генерирует варнинги на это дело?
Не знаю. Ну пусть даже и глотает - так и что? Разве программа от этого становится хуже?
-
>>Разве программа от этого становится хуже?
Лучше точно не становится))
ИМХО это показатель плохой "структурированности"
Когда 2 модуля осознано "ссылаются" друг на дружку - наверно ниче страшного. А вот когда зацикливание проходит через десяток модулей - его без визуализации представить трудно, а избавится от него еще сложней.
-
zamtmn © (23.04.17 19:22) [4]
В IDE Delphi встроен анализ всяческих метрик для оценки сложности кода.
(Project|QA Metrics, Project!QA Audits). Считается, что неглупые люди писали.
Одно из двух - либо аналог вашего построителя зависимостей там есть, либо эти зависимости в пень никому не уперлись и упрощать программу следует, руководствуясь другими критериями.
-
-
Игорь Шевченко
>>Одно из двух - либо аналог вашего построителя зависимостей там есть
Перед следующим постом потрудитесь узнать есть он там или нет.
>>либо эти зависимости в пень никому не уперлись и упрощать программу следует, руководствуясь другими критериями.
Критериев много, неспорю. Если вас не напрягает что программа из модульной превращается в монолитный кусок - рад за вас.
Kerk
На уникальность я не претендую.
-
Kerk © (23.04.17 19:41) [6]
> Забыл самого главного их конкурента)))))
Icarus ?
Ты кстати свою штуку забросил ?
-
> Игорь Шевченко © (23.04.17 21:40) [8]
Чего это я забросил? На прошлой неделе релиз был.
-
Kerk © (23.04.17 22:48) [9]
> На прошлой неделе релиз был.
Писем давно не приходило, значит, забросил.
-
Рассылками теперь TMS занимается, не я. Возможно, ты как обладатель бесплатной лицензии не попал в базу при импорте. Я проверю :)
-
Kerk © (23.04.17 22:48) [9]
Так это у TMS release был. А старые подписчики, кто без TMS владел версией, им теперь как быть ?
И заодно, если не затруднит, ссылку на what's new in this release, а то по TMS-вскому сайту я нифига не понял.
-
Удалено модератором
-
>>Kerk © (23.04.17 23:03)
[11]>>Игорь Шевченко © (23.04.17 23:05)
[12]>>Otrek © (24.04.17 00:01)
[13]>>Удалено модератором
Я на этом форуме небыл лет десять, ниче не меняется)))
В порядке полезности программы:
Исходников больших проектов на дельфи у меня нет, поэтому попробовал на jcl\source\common
http://imgur.com/a/gijuNзачем модулям ссылаться друг на друга в implementation одновременно (пунктирные связи)? подключив в свою программу например JclMath я автоматом получу еще кучу зависимостей и чето я сомневаюсь что все они реально нужны JclMath`у
-
zamtmn © (24.04.17 14:36) [14]
В jcl с этим беда, согласен.
-
Полезной была бы вот какая фича. Иногда в программу по длинной цепочке uses попадают одновременно модули vcl и fmx. За такое хотелось бы бить по рукам, но отследить очень сложно бывает.
-
Kerk © (24.04.17 16:03) [16]
Да, наверно приделаю "распознавание" к чему модуль относится по названию с "коллапсом" модулей принадлежащих чемуто одному в один "квадратик" в графе.
Также добавлю возможность "выдрать" "подграф" цепочек ссылок на определенный модуль
-
Игорь Шевченко © (24.04.17 15:46) [15]
Думаю подобные "проблемные" места найдутся в большинстве больших проектов
-
>>Kerk © (24.04.17 16:03)
[16]>>Полезной была бы вот какая фича.
Приделал фичу в несколько переработаном виде. Добавил параметры SourceUnit и DestUnit.
Указав SourceUnit - увидим связи им порожденные
Указав DestUnit - увидим связи на нем заканчивающиеся - аналог предложеной тобой фичи.
Указав оба параметра - увидим как связаны между собой юниты - как на приложеном скриншоте
http://imgur.com/a/Nyxn1