График зависимости пространства имен для всего решения в NDepend

NDepend кажется отличным инструментом для анализа кода, особенно для визуализации графа зависимостей, поэтому мы купили копию.

Однако единственное, что мне действительно нужно больше всего, кажется невозможным: мне нужен граф зависимости пространства имен для всего решения. Единственное, что я могу получить, это граф сборки.

И вот зачем мне это нужно:

У нас есть архитектурное правило, согласно которому зависимости между границами слоев всегда должны указывать на компоненты интерфейса. Компоненты интерфейса имеют суффикс «Интерфейс» как в имени сборки, так и в пространстве имен.

У нас есть пространства имен в виде

Company.Product.Layer.Component

Поскольку информация о слоях видна не из имен сборок, а из пространств имен, график зависимостей пространств имен будет единственным полезным графиком для такого рода анализа.

Итак, мой вопрос: как я могу проверить, что архитектурное правило, описанное выше? Знаете ли вы, как на самом деле получить граф зависимостей? Знаете ли вы другую возможность проверить правила?


person theDmi    schedule 25.01.2012    source источник


Ответы (1)


Чтобы получить график пространств имен приложений в решениях VS, просто используйте меню, показанное ниже...

Сбросить график только до пространств имен приложений

...и вуаля!

График сборок пространств имен приложений

Благодаря возможностям Code Rule over LINQ Query (CQLinq) приведенное ниже правило CQLinq может быть хорошее начало, чтобы отшлифовать его, чтобы получить точное правило, которое вам нужно:

warnif count > 0 

// Namespaces with suffix Interface
let interfacesNamespaces = 
   Application.Namespaces.WithNameLike("Interface$").ToHashSet()

// Match namespaces that are using something else than interfacesNamespaces 
from n in Application.Namespaces
let nonInterfacesNamespacesUsed = n.NamespacesUsed.Except(interfacesNamespaces)
where nonInterfacesNamespacesUsed.Count() > 0
select new { n, nonInterfacesNamespacesUsed }
person Patrick from NDepend team    schedule 25.01.2012
comment
Большое спасибо, я не знал о функции экспорта в график. Это сделало трюк! Предстоящая функция, о которой вы упоминаете, безусловно, будет долгожданным улучшением. - person theDmi; 26.01.2012