Граф зависимостей пространства имен для всего решения в NDepend - PullRequest
3 голосов
/ 25 января 2012

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

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

И вот почему он мне нужен:

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

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

Company.Product.Layer.Component

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

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

1 Ответ

2 голосов
/ 25 января 2012

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

Reset Graph to application namespaces only

... et voila!

Graph of application namespaces assemblies

Благодаря возможностям Code Rule для 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 }
...