Некоторые интересные факты про BPMonline, а именно, небольшой анализ кода. Анализу подверглись сборки из проекта Zyxel
1) Dependency Graph – показывается связи между assembly\namespace. Размер блока – количество строк кода C#.
Лидируют Terrasoft.Core и Terrasoft.UI.WebControls. А также имеется красная связь между Terrasoft.Messaging.Common и Terrasoft.WebApp
2) Dependencies – таблица зависимостей assembly\namespace друг от друга в числовом эквиваленте, аналог Dependency Graph с другого ракурса.
Число в ячейке указывает количество зависимостей (количество обращений, например, вызов метода) одной assembly\namespace от другой.
Зелёный цвет - assembly\namespace в строке используется в assembly\namespace в столбце
Синий цвет - assembly\namespace в столбце используется в assembly\namespace в строке
Если числа в ячейке нет, то assembly\namespace не связаны. Если в строке указан 0, то связей нет, но скорее всего, в коде есть неиспользуемый using
Считается, что чем больше число зависимостей, тем сильнее нарушается принцип разделения ответственности и independent code. Матрица должна стремиться в минимизации значений этих чисел и минимизации количества чисел.
Примечательно также наличие циклической зависимости Terrasoft.Messaging.Common и Terrasoft.WebApp (отражено также в Dependency Graph), что является нарушением
Конкретно
Terrasoft.Messaging.Common
Наследуется от класса BaseService из Terrasoft.WebApp.ServiceModel
А несколько классов в Terrasoft.WebApp.Services используют классы из Terrasoft.Messaging.Common. Отсюда получается циклическая зависимость(всего из-за одной связи =))
3) Metrics – визуально показывает “размеры” assembly\namespace в количестве кода и в количестве подэлементов. Масштаб 1 строка кода = 14 пикселей.
Лидирует Terrasoft.UI.WebControls, хотя в Dependency Graph он несколько меньше Terrasoft.Core. Так как кроме строк кода в этом графе участвует количество подэлементов, то видимо
Terrasoft.UI.WebControls больше, потому что в неё больше namespace, классов, интерфейсов и других элементов.
4) Summary – показывает общие данные. Всего в ядре около 85000 кода, 14 сборок, 36 неймспейсов, 1858 классов и других типов. Мы используем 28 сторонних сборок (бОльшая часть из стандартного .Net)
Анализ проводился в NDepend